DCT
F(u)=c(u)x=0∑N−1f(x)cos[N(x+0.5)πu]
- 函数的偶对称性,使DCT只有实数域变换结果, 不再涉及复数运算,运算简单,费时少
- 与离散傅里叶变换的关系:DCT等价于对一个信号的2N点离散傅立叶变换,通过矩阵延拓将输入图像偶对称
- DCT系数是实数,而DFT系数是复数,因此,DCT的硬件实现比DFT更容易
- FFT结构还可以使DCT运算速度更快,因此已成为许多应用的首选
先对DFT展开
X[k]=n=0∑N−1x[n](cosN2πkn)−jn=0∑N−1x[n]sin(N2πkn)
单独分析实部和虚部的系数,有
Re[k]=n=0∑N−1x[n]cos(kt)
Im[k]=n=0∑N−1x[n]sin(kt)
我们可以知道,实部的系数为偶函数,虚部的系数为奇函数。
接下来考虑原式信号x[n]的奇偶关系,如果x[n]为一个实偶函数,那么我们在求DFT时,就可以只求实部的运算,称为DCT。
首先对这个信号进行对称扩充(-1/2对称)
x′[m]=x[m](0≤m≤N−1)x′[m]=x[−m−1](−N≤m≤−1)
此时关于这段信号的DFT变为
X[k]=m=−N∑N−1x′[m]e2N−j2πmk
我们为了让信号关于x=0对称,把它向右平移21
X[k]=m=−N+21∑N−21x′[m−21]e2N−j2πmk
对其进行展开后,我们只需要保留实数部分,因为此时虚数部分为0
X[k]=m=−N+21∑N−21x′[m−21]e2N−j2πmk=m=−N+21∑N−21x′[m−21]cos(2N2πmk)
由于该序列是个偶函数,那么根据偶函数的性质,可以改写为
m=−N+21∑N−21x′[m−21]cos(2N2πmk)=2∗m=21∑N−21x′[m−21]cos(2N2πmk)
设n=m−21,带入可得
2∗n=0∑N−1x′[n]cos(2N2π(n+21)k)=2∗n=0∑N−1x′[n]cos(N(n+21)πk)
此时,我们可以加入一个实数系数,乘到原式中
c(u)N2∗n=0∑N−1x′[n]cos(N(n+21)πk)
他的基函数即为
qu+1={N2c(u)cos[2Nπ(2x+1)u]}
c(u)={211u=0u=1,2,...,N−1
将基函数写成矩阵的形式,此矩阵每一行代表着频率的变化,每一列代表不同x(n)的取值
N2.21cos(2N1π)⋮cos(2N(N−1)π)21...cos(2N3π)...⋮cos(2N3(N−1)π)...21cos(2N(2N−1)π)⋮cos(2N(2N−1)(N−1)π)
那么当我们要求一个一维离散余弦变换的时候,只需要计算出这个变换矩阵,然后运算矩阵乘法即可
二维情况
想象在平面直角坐标下,我们对一个正方形进行操作,沿x,y轴对阵,然后在进行平移,直到中心在原点。
二维DCT:
Fs(u,ν)=2N1x=−N∑N−1y=−N∑N−1fs(x,y)exp(−2Nj2π[u(x+21)+ν(y+21)])
由于也是偶实对称的,所以
Fs(u,v)=2N1x=−N∑N−1y=−N∑N−1fs(x,y)⋅cos[2Nπ(2x+1)u]⋅cos[2Nπ(2y+1)ν]
四个象限相同,所以有
Fs(u,v)=N2x=0∑N−1y=0∑N−1f(x,y)⋅cos[2Nπ(2x+1)u]⋅cos[2Nπ(2y+1)ν]
然后进行与一维类似的定义
F(u,v)=N2K(u)K(v)∑N−1N−1y=0∑N−1f(x,y)⋅cos[2Nπ(2x+1)u]⋅cos[2Nπ(2y+1)ν]
K(u)K(ν)={211u=0u=1,2,⋯,N−1={211ν=0ν=1,2,⋯,N−1
逆变换为
f(x,y)=N2u=0∑N−1v=0∑N−1K(u)K(v)F(u,v)cos[2Nπ(2x+1)u]cos[2Nπ(2x+1)u]x,y=1,2,...,N−1
K(u)K(ν)={211u=0u=1,2,⋯,N−1={211ν=0ν=1,2,⋯,N−1
与一维的形式类似,我们也可以找出基函数,然后完成类似的定义
Ff=q⋅f⋅qT=qT⋅F⋅q