![数字图像处理及应用:使用MATLAB分析与实现](https://wfqqreader-1252317822.image.myqcloud.com/cover/293/25111293/b_25111293.jpg)
3.2 离散余弦变换
DFT变换是频谱分析的有力工具,但DFT变换是基于复数域的运算,因而给实际运算带来了不便。因此,工程上特别需要各种在实数域内的变换,DCT变换就是其中一种。DCT变换除了具有一般正交变换的性质之外,还具有许多突出的优点。DCT变换阵的基向量很近似于Toeplitz矩阵的特征向量,很好地体现了人类语音信号及图像信号的相关特性。因此,许多学者认为,在语音和图像信号处理方面,DCT变换被认为是准最佳变换。而且,DCT变换还可以通过实偶函数的傅里叶变换建立与FFT变换之间的关系。
DCT变换由Ahmed和Rao于1974年首先提出,随后就得到了广泛的应用,在许多领域,DCT变换被认为是一种准最佳变换。在近年颁布的一系列视频压缩编码的国际标准建议中,都将DCT变换作为其中的一个基本处理模块。DCT变换除上述优点之外,还具有许多特点,如DCT为实数变换、变换矩阵确定(与变换对象无关)、具有多种快速算法,二维DCT还是一种可分离的变换等。
3.2.1 一维DCT变换
一维DCT的变换核定义为
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_15600.jpg?sign=1739157934-ywEMqTvdWik7hTuILMljZe5MjmzZexca-0-9f878a025eec6472da57ae370e07e975)
式中
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_17035.jpg?sign=1739157934-QDKvmsT2woI1e13Apbsq7VgWr9S0eBQW-0-1bbfd7ff7232672fcec4c9e3833cc6d0)
若f(x)(x=0,1,2,3,…,N—1)为N点离散序列,则一维DCT变换的定义为
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_15603.jpg?sign=1739157934-NyI2SWbJzn4ed9kToEWVlMCj3fn2gwIk-0-9cf6682d488e9f048c4e15372474da02)
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_15604.jpg?sign=1739157934-pEBRdEmGYOhITNx5qg6Nt0Y5NtfHvH0e-0-659373d9b517387a1ca933f6da2d9f31)
式中,F(u)是第u个余弦变换系数;u是广义频率变量。
一维DCT逆变换定义为
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_15606.jpg?sign=1739157934-M0S8QiIiqA0YQwfsKnIioZx5WNGbhyoV-0-c6ee65ee12b4c06cb83f41356c9d25fe)
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_15607.jpg?sign=1739157934-396mq2lRes7F3YNEvccWpo6im4ipz6yt-0-d9988d74c227f8c9e26cd101a89e8ccc)
根据式(3-65)和式(3-66)可以看出,一维DCT正变换与逆变换的核相同。与DFT变换一样,DCT变换也可以写成如下矩阵形式:
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_15609.jpg?sign=1739157934-O0Y3czLIl8t9ONLPjgzK3hG5gJuvneT7-0-5b70b47a4f2bb4bac009bd17b2452fad)
式中
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_15611.jpg?sign=1739157934-JtGnbZUxIubQ3DX3ukoYJBGXHnF1Pqat-0-cc0f1c5540c0bdb8f5ab213a2223d275)
3.2.2 二维DCT变换
一维DCT变换可以很方便地推广到二维DCT变换,设二维离散图像序列为{f(x,y)(x=0,1,…,M—1;y=0,1,…,N—1)},则二维DCT正变换核为
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P82_15613.jpg?sign=1739157934-AkOROgNxqmJ6EkwMt0GNDMGbgSb4qJ4Z-0-90247c55dfd7ab89ca149e42793ea174)
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P83_15616.jpg?sign=1739157934-pFIj6BFl4gKvn7DKfzyoHFbyicisbMri-0-138e385c1be8f40df61f110e269c8ada)
其中,C(u)和C(v)的定义与式(3-64)相同。
二维DCT正变换为
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P83_15618.jpg?sign=1739157934-DA5aN2AglPOrYdK3DzMc3ubD5yKEDCMB-0-bd35891a73de5c96fdf41c9deff5fdf1)
二维DCT逆变换定义形式为
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P83_15620.jpg?sign=1739157934-ITrPN983ZiCemRTAYj6nEeRAi0BmQVnm-0-b4305b138e95950c12be11090c346017)
与一维DCT变换一样,二维DCT变换也可以写成如下矩阵形式:
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P83_15622.jpg?sign=1739157934-oc2X3Ee2eRfoKdfXV0MoHlgmmRDkCVX5-0-3a8c37f52fef0d0d4bd0717796b08ad0)
根据式(3-69)和式(3-70)可以看出,二维DCT正变换与逆变换的核也相同,而且是可分离的,即可分离以后进行运算。
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P83_15624.jpg?sign=1739157934-HieJQXiSGWu1CWQrhn6gkDLEZTyI2I0o-0-3cf4648c8c9c48858a259494157ac9ce)
x,u=0,1,2,3,…,M—1;y,v=0,1,2,3,…,N—1
与DFT变换类似,根据可分离性原理,一次二维DCT变换可以通过二次一维DCT正变换完成。其算法流程如图3-6所示。
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P83_4509.jpg?sign=1739157934-JjkUqG9P2VWKP6YJY2bQCh068pihu3je-0-b5516a88b60bded956001fc728d2771e)
图3-6 DCT变换的分离运算流程
3.2.3 DCT变换的快速算法
DCT变换根据定义也可以直接进行计算,但计算量非常大,在实际应用中很不方便。目前,基于DCT的快速算法有许多种,由于FFT算法是一个应用广泛且非常成熟的快速算法,因此许多DCT算法也是基于FFT的原理建立起来的。具体步骤如下:
(1)将离散序列f(x)延拓为如下形式的2N点序列。
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P83_15625.jpg?sign=1739157934-yeaNPmMyjB14Nw9UgQiCId63s2NinjZh-0-c88a8ba544928ef6bc301571e3334553)
(2)根据一维DCT的定义,对延拓序列f1(x)进行DCT运算。
当u=0时
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P84_15629.jpg?sign=1739157934-LpBPyNLHGOFefAgZyxQ9JskE9YExgQoZ-0-e933931bbe4ad6905c539eb115c1bb26)
当u=1,2,3,…,N—1时,有
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P84_15631.jpg?sign=1739157934-U4d8QvyPOWqyYXvcKEwZMVfO91T0Z6X2-0-6f762f81b93756441ae9d5a57189923c)
因此,DCT快速算法可以通过对延拓序列f1(x)进行FFT运算完成,即将N点的序列f(x)延拓为2N点的序列f1(x)后,对序列f1(x)进行FFT运算,再将结果乘以并取其实部,然后乘以
就是DCT运算的结果。
对于DCT逆变换(又称为IDCT),也可以采取类似的方法进行快速运算。
(1)将离散序列F(u)延拓为如下形式的2N点序列。
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P84_15632.jpg?sign=1739157934-s7BcGJJinmKLBRr55RuWY3qCckgglKfm-0-190a47b1a3412480a4835230494e7777)
(2)根据一维IDCT的定义,对延拓序列F1(u)进行IDCT运算,公式为
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P84_15634.jpg?sign=1739157934-ZjzSqLntjcCIfNoTusDOGbGl5qsUAM3Y-0-e983958c0a20e781d5c835ef2dcb958d)
3.2.4 二维DCT的频谱分布
以图像傅里叶变换为基础,二维DCT的频谱特性比较好理解,现以一个DCT变换实例来分析其频谱分布。
例3-4:DCT变换实例
图3-7(a)为原始图像,图3-7(c)为原始图像旋转45°角的图像,图3-7(b)和图3-7(d)分别为图3-7(a)和图3-7(c)的DCT变换。对于DCT,频率(0,0)点对应于频谱原点(u=0,v=0),低频在左上角,高频在右下角,(M—1,N—1)点对应于高频成分;DCT低频系数值较大,高频系数值较小,即能量主要集中在低频,从左上角往右下角频率升高、能量降低。根据DCT变换原理,其运算相当于对带有中心偏移的实偶函数进行二维DFT运算,因此,DCT的频谱分布与DFT相差一倍。
![](https://epubservercos.yuewen.com/ED2C5A/13467200603426206/epubprivate/OEBPS/Images/Figure-P85_4669.jpg?sign=1739157934-17u3lFdbprvJtXvADD8OZxlExSsSQ6EP-0-ff31c5ab46ff22e1728a8a198492f0f0)
图3-7 DCT变换的频谱分布