Tải bản đầy đủ (.doc) (13 trang)

PHƯƠNG PHÁP NÉN ẢNH DCT (Discrete Cosin Transform) VÀ ẨN TIN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (351.67 KB, 13 trang )

PHƯƠNG PHÁP NÉN ẢNH DCT VÀ ẨN TIN
Hướng dẫn: PGS.TS Trịnh Nhật Tiến
Học viên: Nguyễn Quang Hiệp
Mã số: 12025013
Lớp: Mật mã và an toàn dữ liệu
LỜI NÓI ĐẦU
Ngày này mạng máy tính đã trở nên quen thuộc và phát triển rộng khắp vì thế nhu cầu sử
dụng tăng cao. Điều này dẫn tới việc dữ liệu truyền tải qua mạng máy tính cũng rất lớn.
Phần lớn dữ liệu được truyển tải trên mạng máy tính thường thuộc các loại sau: ký tự,
ảnh và các loại media còn lại.
Việc hàng ngày lượng dữ liệu lớn được luân chuyển sử dụng trên mạng tạo nên các hoạt
động truyển tải, lưu trữ, tái sử dụng dẫn đến hành vi vi phạm và đánh cắp ở nhiều mức độ
khác nhau và khó kiểm soát. Cũng như việc đảm bảo an toàn hay bảo mật thông tin cũng
được quan tâm.
Vì thế dẫn đến việc có nhiều thuật toán được phát minh và sử dụng để nén và mã hóa
ảnh một trong những dữ liệu sử dụng nhiều nhất trên mạng máy tính. Tác dụng của việc
nén và mã hóa ảnh nhằm vào các mục đích như:
• Giảm kích thước ảnh mà chất lượng ảnh vẫn đảm bảo. Tăng khả năng truyền tải
cũng như lưu trữ.
• Chèn thêm các thông tin khác như bản quyền, xuất xứ hoặc các thông tin ẩn nhằm
tránh việc bị sửa đổi trái phép, sao lưu tái sử dụng mà không có sự cho phép của
nguời sở hữu hợp pháp.
• Truyền đi thông tin ẩn không muốn bên thứ ba biết được.
MỘT VÀI PHƯƠNG PHÁP DÙNG ĐỂ NÉN ẢNH
Phương pháp biến đổi DCT, biến đổi cosin rời rạc thường được sử dụng trong ảnh chuẩn
JPEG và GIF.
Phương pháp biến đổi DFT, biến đổi Furier khắc phục được một số nhược điểm của biến
đổi DCT.
CÁC NGUYÊN TẮC CỦA NÉN ẢNH
Một tính chất chung nhất của tất cả các ảnh số đó là tương quan giữa các pixel ở cạnh
nhau lớn, điều này dẫn đến dư thừa thông tin để biểu diễn ảnh. Dư thừa thông tin sẽ làm


cho việc mã hoá không tối ưu. Do đó công việc cần làm để nén ảnh là phải tìm được các
biểu diễn ảnh với tương quan nhỏ nhất để giảm thiểu độ dư thừa thông tin của ảnh. Thực
tế, có hai kiểu dư thừa thông tin được phân loại như sau:
• Dư thừa trong miền không gian: tương quan giữa các giá trị pixel của ảnh, điều này
có nghĩa rằng các pixel lân cận của ảnh có giá trị gần giống nhau (trừ những pixel
ở giáp đường biên ảnh)
• Dư thừa trong miền tần số: Tương quan giữa các mặt phẳng màu hoặc dải phổ
khác nhau.Trọng tâm của các nghiên cứu về nén ảnh là tìm cách giảm số bit cần để
biểu diễn ảnh bằng việc loại bỏ dư thừa trong miền không gian và miền tần số càng
nhiều càng tốt
Trong số các thuật toán biển đổi ảnh để nén hoặc mã hóa có hai loại: Không mất dữ liệu
và có mất dữ liệu.
Trong báo cáo này thuật toán DCT là thuật toán biển đổi cosin rời rạc được chọn để trình
bày. Vì nó có một số ưu điểm so với các thuật toán khác và nó được chọn sử dụng cho
chuẩn ảnh JPEG (Joint Photographic Experts Group)
Mã hóa ảnh theo tiêu chuẩn JPEG dựa trên thuật toán DCT và xử lý nén Hoffman có thể
mô tả qua các bước như dưới đây:
1. Ảnh gốc được chia thành từng mảng pixel thông thường là kích thước 8x8 pixels.
2. Duyệt mảng từ trái qua phải và từ trên xuống dưới. Biến đổi DCT cho từng khối
(Zigzag)
3. Mỗi khối được lượng tử hoá.
4. Các khối được nén lại để giảm không gian chứa.
5. Khi cần lấy lại ảnh thì làm theo trình tự ngược lại, đọc zigzag từng khối như trước
và sử dụng biến đổi cosin rời rạc ngược IDCT - Inverse Discrete Cosin Transform
để lấy lại ảnh đã qua xử lý.
Công thức DCT được biểu diễn như bên dưới:
Với khối dữ liệu kích thước 8x8 thì ta có công thức như hình bên dưới:
Vì ma trận phân tích từng khối 8 pixel có tính trực giao nên việc tính được ra ma trận
nghịch đảo là dễ dàng.
Với việc đánh giá trị màu sắc bằng mức từ 0 đến 255 với 0 là đen hoàn toàn và 255 là

trắng hoàn toàn. Vì vậy mỗi bức ảnh sẽ được mô tả chính xác bằng 256 mức xám này.
Vì DCT được thiết kế để làm việc với giải giá trị từ -128 đến 127 nên một khối 8 pixel khi
đưa vào xử lý DCT thì trước tiên là trừ 128 cho mỗi giá trị.
Ví dụ với mảng bên dưới, mảng ban đầu là:
Mảng sau khi trừ mặc định 128 là:
Giờ biển đổi DCT là thực hiện bước nhân ma trận theo công thức:
Sau biến đổi ta được một ma trận mới như hình bên dưới:
Đây là một ma trận mỗi chiều từ 0 đến 7 với giá trị góc trên cùng phía trái là C00 là giá trị
thấp nhất trong miền tần số của bảng giá trị và tương tự thì giá trị góc dưới cùng bên phải
C77 là giá trị cao nhất miền tần số.
Và một lưu ý quan trọng là mắt người nhạy cảm nhất với vùng giá trị tần số thấp và trong
bước lượng tử sẽ phản ánh điều này.
LƯỢNG TỬ HÓA
Đây là bước quan trọng nhất nó chính là bước làm cho tiêu chuẩn JPEG được lựa chọn
sử dụng rộng rãi.
Ta sẽ có thang giá trị từ 1 đến 100 cho chất lượng ảnh với giá trị 1 là chất lượng ảnh thấp
nhất và 100 là chất lượng ảnh cao nhất. Tương ứng sẽ là 1 là giá trị có tỉ số nén cao nhất
và 100 thì ngược lại tỉ số nén sẽ thấp nhất.
Việc lựa chọn tỉ số nén và chất lượng ảnh tùy thuộc từng nhu cầu sử dụng cụ thể để đáp
ứng.
Dưới đây là ma trận biến đổi DCT với giá trị 50, cân bằng giữa chất lượng hình ảnh và tỉ
số nén.
Lấy bảng này làm giá trị chuẩn thì khi muốn chất lượng ảnh cao hơn tức là tỉ số lớn hơn
50 ta chỉ cần lấy bảng này nhân với (100-mức mong muốn)/50, còn với chất lượng thấp
hơn 50 ta nhân với 50/mức mong muốn.Dưới đây là hai bảng giá trị với 10 và 90 sau khi
sử dụng tính toán trên và các gía trị được làm tròn về con số nguyên dương. Có dải giá trị
từ 1 đến 255.
Lượng tử hóa sẽ được sau khi ta thực hiên việc làm tròn với công thức.
Sau bước làm tròn này như đã nói về giá trị góc trên bên trái C00 trong miền tần số là ảnh
hướng lớn tới thị giác người. Nên sau khi có được C thì các giá trị bằng 0 là các giá trị

không ảnh hưởng tới chất lượng ảnh trong mắt người.
Sau bước này nếu dùng ma trận Q10 thì ta có nhiều giá trị bằng 0 hơn vì chất lượng ảnh
thấp còn với Q90 thì ta có ít giá trị bằng 0 hơn.
Bước cuối cùng ta chuyển giá trị ảnh trong ma trận này thành dạng binary để lưu trữ. Ta
đọc theo quy định zigzag trong mảng này.
Để giải nén ngược lại và đọc lại thành ảnh ta có các bước sau:
Ta sử dụng lại mảng giá trị Q đã dùng như ở trên ta có Q10 và Q90 để tính ngược lại ra
mảng R như hình bên dưới:
Sau đó thì sử dụng IDCT với ma trận R vừa thu được rồi cộng ngược lại tiếp với 128 là
giá trị ban đầu ta mặc định đã trừ đi ở đầu vào ma trận Q.
Mảng sau khi thu được ta có thể so sánh so với bảng mã giá trị đầu vào như hình bên
dưới:
Với sự chú ý là thực tế với Q thấp hơn 50 thì chất lượng ảnh giảm đi rõ rệt mà độ nén thì
lại không tăng lên tương ứng. Và các bức ảnh với miền tần số cao, hoặc tỉ lệ tương phản
cao thì chất lượng ảnh JPEG không được mượt mà cho lắm.
CÁC BƯỚC BIẾN ĐỔI, NÉN VÀ CHÈN DỮ LIỆU VỚI ẢNH
• Bước một sử dụng thuật toán biến đổi cosin rời rạc các giá trị bit biểu diễn ảnh gốc
thành một mảng ma trận giá trị số. Trong đó lưu giữ các giá trị biểu diễn màu sắc
và độ sâu của từng bit giá trị ảnh gốc.
• Nếu chỉ cần nén ảnh thì sau bước này trong chuẩn ảnh JPEG sẽ thực hiện nén
theo thuật toán Hoffman. Thuật tóan này sẽ lược bớt các giá trị dư thừa và lưu lại
thành một mảng ma trận các giá trị mới đã lược bớt.
• Nếu cần chèn dữ liệu mật thì bỏ qua việc nén sử dụng thuật toán Hoffman mà thay
vào đó duyệt mảng ma trận các giá trị rồi chèn thông tin đã được nhị phân hóa
trước vào ảnh.
• Lưu mảng nhị phân khóa để lấy lại được thông tin. Trong trường hợp thông tin này
còn sử dụng thêm các phương pháp mã hóa khác.
• Sử dụng thuật toán ngược DCT để chuyển đổi mảng ma trận giá trị trở lại thành
ảnh mới đã được nén hoặc mã hóa.
Có thể hình dung ra các bước như hình bên dưới:

Với phần phía bên phải vạch đỏ trong ảnh có thể là việc nén dữ liệu hoặc chèn thêm
thông tin hoặc chèn thủy vân số vào ảnh.
Với việc zigzag có thể hiểu bằng hình vẽ bên dưới:
Bước biến đổi xuôi hay còn gọi là forward DCT, sau khi biến đổi DCT ta được dãy các
mảng giá trị biểu trưng cho từng cụm 8 pixels một của cả bức ảnh.
Sau bước này ta tiến hành mã hóa chèn dữ liệu mong muốn vào mảng ma trận này. Với
lưu ý là nếu ta chèn lượng thông tin ít thì chất lượng ảnh ít bị thay đổi và khó nhận ra là có
sự thay đổi này.
Nếu lượng thông tin chèn vào quá nhiều sẽ tạo nhiễu rõ ràng trên ảnh và mắt thường có
thể nhận ra được thì việc bí mật chuyển tin dễ bị lộ.
Sau đó dùng thuật toán IDCT - Inverse Discrete Cosin Transform (chuyển đổi ngược DCT)
trở lại ta thu được ảnh mới mang chất lượng tương đương với ảnh cũ và mang thêm dữ
liệu đã mã hóa.
Để lấy lại được dữ liệu đã mã hóa ta lưu trữ dữ liệu đã mã hóa dưới dạng mảng ma trận
giá trị nhị phân. Khi nhận được ảnh có chứa dữ liệu mã hóa ta sử dụng DCT chuyển đổi
ảnh thành mảng ma trận giá trị rồi dùng mảng ma trận khóa dữ liệu để duyệt mảng giá trị
ảnh lấy lại mảng giá trị thông tin.
DCT ƯU NHƯỢC ĐIỂM
Các ưu nhược điểm của phương pháp biến đổi DCT là:
• Ưu điểm của biến đổi DCT là với việc xứ lý từng khối tiêu chuẩn 8x8 pixel thì tốc độ
là chấp nhận được. Đây là ưu điểm lớn nhất của biến đổi DCT với ảnh tiêu chuẩn
JPEG.
• Nhược điểm của biến đổi DCT là sự tương quan của các pixel lề các khối 8x8 sẽ có
ảnh hưởng đến chất lượng ảnh.
• Trong việc sử dụng ảnh tiêu chuẩn JPEG để lưu trữ thông tin kiểu thủy vân giấu số
thì có nguy cơ cao không đọc ngược lại được thông tin đã lưu trữ vì trong quá trình
tạo ảnh có một phần dữ liệu bị nén theo thuật toán Hoffman.
Tài liệu tham khảo:
• Least Significant Bit (LSB)-based Steganography - Dr. Natarajan Meghanathan
• DCT formular - Ken Cabeen and Peter Gent Math 45 College of RedWoods

• Áp dụng một số kỹ thuật nén ảnh cho truyền dữ liệu ảnh động qua mạng - Trần
Vương Nguyên, Học viện Bưu chính viễn thông, Mã số 60.48.15 – 2011
• Toàn bộ bài giảng của giáo sư Baldwin Austin College về DCT transform trên
developer.com.
• Địa chỉ: />using-Java.htm

×