11离散余弦变换(DiscreteCosineTransform,DCT)原理1)离散余弦变换定义(1)一维离散余弦变换的定义由下式表示:式中F(u)是第u个余弦变换系数,u是广义频率变量,u=1,2,3.....N-1,f(x)是时域N点序列,x=0,1,2...N-1(2)一维离散余弦反变换由下式表示:(3)二维离散余弦变换的定义由下式表示:最后的式子是正变换公式。其中f(x,y)是空间域二维向量之元素,其中x,y=0,1,2...N-1,F(u,v)是变换系数阵列之元素。式10)(1)0(NxxfNFNuxxfNuFNx2)12(cos)(2)(10NuxuFNFNxfNu2)12(cos)(2)0(1)(11NvyNuxyxfNvuFNuxyxfNuFNvyyxfNvFyxfNFNxNyNyNxNxNyNxNy2)12(cos2)12(cos),(2),(2)12(cos),(2)0,(2)12(cos),(2),0(),(1)0,0(10101010101010102中表示的阵列为N×N。(4)二维离散余弦反变换由下式表示:2)性质:(1)余弦变换是实数、正交。(2)离散余弦变换可由傅里叶变换的实部求得(3)对高度相关数据,DCT有非常好的能量紧凑性(4)对于具有一阶马尔可夫过程的随机信号,DCT是K-L变换的最好近似2离散余弦变换Matlab实现(1)二维离散余弦变换f=imread('trees.tif');f=im2double(f);F=dct2(f);subplot(121),imshow(f,[]);subplot(122),imshow(log(1+20*abs(F)),[])NvyNuxvuFNNuxuFNNvyvFNFNyxfNuNvNuNv2)12(cos2)12(cos),(22)12(cos)0,(22)12(cos),0(2)0,0(1),(111111113图1原图以及进行离散变换后图对比再进行逆变换:I=idct2(F);subplot(121),imshow(f);subplot(122),imshow(I)图2原图与恢复后的图对比将数据进行压缩再逆变换:4CLFf=imread('cameraman.tif');F=dct2(f);F(abs(F)50)=0;k=idct2(F);subplot(121),imshow(f,[]);subplot(122),imshow(k,[])图3对比图(2)将输入图像分解成8×8的图像块,然后对每个图像块进行DCT变换,保留64个DCT系数部分,然后通过压缩保存数据。还原时,进行DCT逆变换重构图像。I1=im2double(imread('moon.tif'));T=dctmtx(8);B=blkproc(I1,[88],'P1*x*P2',T,T');5mask=[1111000011100000110000001000000000000000000000000000000000000000];B2=blkproc(B,[88],'P1.*x',mask);I2=blkproc(B2,[88],'P1*x*P2',T',T);subplot(121),imshow(I1,[]);subplot(122),imshow(I2,[])图4原始图像与压缩图像64讨论分析离散余弦变换是傅里叶变换的实数部分,比傅里叶变换有更强的信息集中能力。对于大多数自然图像,离散余弦变换能将大多数的信息放到较少的系数上去,提高编码的效率。在图像的变换编码中有着非常成功的应用。图像进行DCT变换后,在频域中矩阵左上角低频的幅值大而右下角高频幅值小,经过量化处理后产生大量的零值系数,在编码时可以压缩数据,因此DCT被广泛用于视频编码图像压缩。