3.5 离散余弦变换
一、一维DCT
利用FFT的快速算法
基于代数分解的快速算法
1、利用FFT的快速算法
余弦变换核实际上就是傅里叶变换核的实部。而变换计算中的乘法运算就是f(x)与变换核的乘法运算。一种自然的想法就是先对f(x)执行FFT,然后对其取实部就可以了
2、基于代数分解的快速算法
与FFT类似,利用代数分解的FDCT就是利用余弦函数的周期性以及正弦函数与余弦函数之间的关系,同时合理安排计算次序来实现的。
以上为n=4 和n=8 时的FDCT流程图
二、二维DCT
由于二维离散余弦变换的可分离性,二维DCT可以用一维DCT来实现
三、Matlab实现
例
RGB=imread('image2.jpg'); %装入真彩图像
figure(1);
imshow(RGB); %显示彩色图像
GRAY=rgb2gray(RGB); %将真彩图像转换为灰度图像
figure(2);
imshow(GRAY); %显示灰度图像
DCT=dct2(GRAY); %进行余弦变换
figure(3);
imshow(log(abs(DCT)),[ ]); %显示余弦变换
结果
四、应用
离散余弦变换在图像压缩中具有广泛的应用
例如,在JPEG图像压缩算法中,首先将输入图像划分为8(8的方块,然后对每一个方块执行二维离散余弦变换,最后将变换得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。在接受端,将量化的DCT系数进行解码,并对每个8(8方块进行二维IDCT,最后将操作完成后的块组合成一幅完整的图像。