Cơ bản về xử lý ảnh số
164
Ngoài ra, còn một cách khác để tính DCT bằng MATLAB, đó là sử dụng ma trận biến đổi T.
Cách này chỉ áp dụng cho các ma trận vuông. Ma trận biến đổi T có kích thước MxM được
định nghĩa như sau:
1/
0,0
1
2
(2
1)
cos
2
pq
M
p
q M
T
q
p
M
M
π
⎧
=
≤ ≤
−
⎪
= ⎨
+
⎪
⎩
nôi khaùc
(11.7)
Với A là ma trận kích thước MxM thì T*A sẽ là ma trận kích thước MxM trong đó mỗi cột
của nó là biến đổi DCT 1 chiều của các cột tương ứng của A. Biến đổi DCT 2 chiều của A sẽ
là B = T*A*T’. T là một ma trận thực, trực chuẩn, nghĩa là
1
'
T
T
−
=
, do đó biến đổi DCT
ngược của B chính là A = T’*B*T. Trong MATLAB, ma trận T là kết quả trả về khi ta gọi
hàm dctmtx.
>> T = dctmtx(M) % MxM là kích thước của T
Sau đây là một ví dụ minh hoạ cách thực hiện biến đổi DCT trong MATLAB. Ta thực hiện
DCT trên ảnh “autumn.tif”. Sau đó các hệ số có biên độ <10 sẽ được cho bằng 0, rồi thực hiện
biến đổi DCT ngược. Vì hầu hết các thông tin của ảnh chỉ tập trung trong một vài hệ số DCT
nên ảnh thu được sẽ không khác biệt nhiều so với ảnh gốc.
a) Ảnh gốc
b) Ảnh sau khi nén các hệ số DCT <10 về 0
c) Biến đổi DCT của ảnh gốc
Hình 11.16.
Ví dụ 11-9. Thực hiện biến đổi DCT và DCT ngược:
RGB = imread('autumn.tif'); % Đọc ảnh
I = rgb2gray(RGB);
% Chuyển sang dạng grayscale
J
=
dct2(I); %
Biến đổi DCT
imshow(log(abs(J)),[]), colormap(jet(64)), colorbar % Hiển thị biến đổi DCT
J(abs(J) < 10) = 0;
% Nén các hệ số <10 về 0