IV – Màu sắc 1 Bảng thuật ngữ
3. Biến đổi cô-sin rời rạc
- Biến đổi cô-sin rời rạc ( DCT ) biểu diễn một ảnh như là tổng của các hàm sin với biên độ và tần số biến đổi . Hàm dct2 tính DCT hai chiều của một ảnh . DCT có tính chất mà với các ảnh điển hình , hầu hết các thông tin có ý nghĩa về ảnh được tập trung vào các hệ số của DCT . Vì lý do này , DCT thường được sử dụng trong các ứng dụng nén ảnh . Chẳng hạn ,DCT là trung tâm của giải thuật nén ảnh theo chuẩn quốc tế thường được biết với tên JPEG ( tên này do nhóm phát triển đặt ra : Joint Photographic Experts Group ) - DCT hai chiều của ma trận A có kích thước MxN được định nghĩa như sau :
- Các giá trị Bpq được gọi là hệ số DCT của A . DCT có thể biến đổi ngược được và biến đổi ngược của nó cho bởi công thức :
- Biểu thức DCT ngược có thể được xem xét khi coi rằng mọi ma trận A kích thước MxN như là tổng của MN hàm có dạng :
- Những hàm này đựơc gọi là
những hàm cơ sở của DCT . Hệ
số DCT Bpq có thể được xem như
trọng số cho mỗi hàm cơ sở . Với
các ma trận 8x8 , 64 hàm cơ sở
Ma trận biến đổi DCT
- Toolbox xử lý ảnh sử dụng 2 cách để tính DCT . Cách thứ nhất là dùng hàm dct2 . Hàm dct2 sử dụng giải thuật dựa trên FFT để tăng tốc tính toán với các ảnh có kích thước lớn . Cách thứ hai là sử dụng ma trận biến đổi DCT . Ma trận này được trả về từ hàm dctmtx và được sử dụng hiệu quả hơn với các ảnh có kích thước nhỏ như 8x8 , 16x16 . Ma trận biến đổi MxM – T được cho bởi :
Với ma trận A có kích thước MxM , T*A là một ma trận MxM mà các cột của nó là DCT một chiều của các cột trong A . DCT hai chiều của A có thể thu được từ biểu thức : B=T*A*T’ . Do T là ma trận trực giao nên ma trận nghịch đảo của nó cũng là ma trận chuyển vị nên DCT hai chiều của B là T’*B*T
DCT và nén ảnh
- Trong giải thuật nén ảnh JPEG , ảnh vào được chia làm các khối có kích thước 8x8 hoặc 16x16 và DCT hai chiều được tính cho mỗi khối . Hệ số DCT sau đó được lượng tử hoá , mã hoá và truyền tải . Bộ nhận JPEG ( hoặc chương đọc file JPEG ) sẽ giải mã hệ số đã được lượng tử của DCT , tính DCT ngược cho mỗi khối và sau đó đặt các khối lại với nhau trong một ảnh duy nhất . Với các ảnh điển hình , nhiều hệ số DCT có giá trị gần 0 , những hệ số này có thể bị bỏ qua mà không ảnh hưởng nhiều đến chất lượng của ảnh nén
- Ví dụ sau tính DCT hai chiều của các khối 8x8 trong một ảnh , bỏ qua ( đặt bằng 0 ) tất cả ngoại trừ 10 trong số 64 hệ số DCT của mỗi khối và sau đó xây dựng lại ảnh bằng DCT hai chiều ngược của mỗi khối . Phương pháp ma trận chuyển đổi DCT được sử dụng : I = imread('cameraman.tif'); I = im2double(I); T = dctmtx(8); B = blkproc(I,[8 8],'P1*x*P2',T,T'); mask = [1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
B2 = blkproc(B,[8 8],'P1.*x',mask); I2 = blkproc(B2,[8 8],'P1*x*P2',T',T); imshow(I), figure, imshow(I2)
-
Mặc dù chất lượng của ảnh nén bị suy giảm , nó vẫn rõ nét thậm chí gần 85% hệ số DCT bị bỏ qua .