离散余弦变换(DCT)及其C++实现:定义:离散余弦是一种基于实数的正交变换。一维离散余弦的定义如下:式中,F(u)为第u个余弦变换系数,u为广义频率分量,f(x)为时域中N点序列,x=0,1,2,…N-1。对于二维的离散余弦变换的定义如下:基本算法二维的DCT可分解为两个一维的DCT,即现对图像信号(二维数据)的行进行一位DCT,然后再对列进行一维DCT。基本算法描述如下:求对行进行一位DCT的变换矩阵系数coefa求系数矩阵coefa的转置矩阵coefb用来对列进行一维DCT利用系数矩阵coefa和coefb对二维信号data先近行行变换,再进行列变换。快速算法利用快速傅立叶变换可以得到DCT的快速算法。首先,将f(x)进行延拓:按照上述定义,fe(x)的离散余弦变换为:式中,Re{}表示取复数的实部。由上式知,为fe(x)的2N点离散傅立叶变换。以此,对于快速离散余弦变换,可以把长度为N的序列f(x)的长度延拓为2N的序列fe(x),然后再对延拓的结果fe(x)进行离散傅立叶变换,最后取离散傅立叶变换的实部便是离散余弦变换的结果,完成快速的DCT。程序说明采用C++语言编写,共有三个函数:主函数voidmain()完成DCT变换;plex<double>*plex<double>*FD,intr)完成快速傅立叶变换;子函数voiddct(double*f,double*F,intr)完成快速DCT。参数说明见源程序注释。
离散余弦变换DCT及其C++实现 来自淘豆网m.daumloan.com转载请标明出处.