DCT变换
DCT又称离散余弦变换,是一种块变换方式,只使用余弦函数来表达信号,与傅里叶变换紧密相关。常用于图像数据的压缩,通过将图像分成大小相等(一般为8*8)的块,利用DCT对其进行变换,得到更加简洁的数据。因为图像像素间存在较大的空间相关性,DCT可以大大减小这些相关性,使图像能量集中在左上角区域,从而利于数据压缩。变换后得到的数据称为DCT系数。这一过程是无损的。
二维DCT变换
这里来看看二维DCT变换的公式:
c(u)和c(v)为添加的系数,主要作用为使DCT变换矩阵为正交矩阵。F(u,v)即为DCT变换系数,可以通过矩阵形式来表示:
A即为正交矩阵,通过F和A逆变换即可恢复图像数据。
下面通过一个例子来说明:
clear;
clc;
I = [12,23,53,16;42,16,68,45;34,62,73,26;72,15,34,28]; %数据块
A = zeros(4); %变换矩阵A,也可以通过函数dctmtx(n)求得
for i = 0:3
for j = 0:3
if i == 0
a = sqrt(1/4);
else
a = sqrt(2/4);
end
A(i+1,j+1) = a*cos((j+0.5)*pi*i/4)
end
end
D = A*I*A'; %DCT变换
D1 = dct2(I); %matlab DCT函数进行DCT变换
D2 = A'*D*A; %DCT逆变换
由结果可以看出,D,D1方式得到的DCT系数相同,说明矩阵形式的DCT变换公式是正确的&#