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.
Trang 1PHƯƠ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
Trang 2LỜ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:
Trang 31 Ả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ị
Trang 4Ví 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:
Trang 5Sau 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
Trang 6Dướ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
Trang 7Lấ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
Trang 8Lượ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:
Trang 9Ta 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
Trang 10Mả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
Trang 11trướ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:
Trang 12Bướ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
Trang 13Tà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ỉ:http://www.developer.com/java/ent/article.php/3530866/Steganography-101-using-Java.htm