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,最后将操作完成后的块组合成一幅完整的图像。