DCT变换自学笔记

一、DCT简介

此处,DCT指Discrete Cosine Transform,意思是离散余弦变换(下文均用DCT表示),其常见用途是对音视频进行数据压缩。维基百科上的解释:DCT以不同频率振荡的余弦函数之和来表示数据点的有限序列。

二、背景知识

DCT 将原始图像信息块转换成代表不同频率分量的系数集,这有两个优点:
其一,信号常将其能量的大部分集中于频率域的一个小范围内,这样一来,描述不重要的分量 只需要很少的比特数;
其二,频率域分解映射了人类视觉系统的处理过程,并允许后继的量化过程满足其灵敏度的要求。
(摘自:https://www.cnblogs.com/wengzilin/archive/2013/05/26/3100027.html
余弦函数是傅里叶变换中的实数部分。DCT与DFT(离散傅里叶变换)联系紧密。关于傅里叶变换的理解,强烈推荐 https://blog.csdn.net/wh8_2011/article/details/54862595
这篇文章最早发在知乎上,这是原网址。
https://zhuanlan.zhihu.com/p/19763358

三、一种通用DCT公式

下列公式摘自
https://wenku.baidu.com/view/cbef8856a8114431b80dd835.html
https://blog.csdn.net/qingkongyeyue/article/details/58082912

四、4种常用DCT公式总结
在这里插入图片描述
有些算法进一步将x_0和x_(N-1)乘以√2,并相应地将X_0和X_(N-1)乘以1/√2 。这可令DCT-I矩阵正交,如果进一步乘上一个总的缩放因子√(2/(N-1)),会打破与实偶DFT的直接对应关系。
DCT-I(总缩放因子可达到2)和一个有(2N-2)个实数的实偶对称的DFT完全等价。例如,一个有着N=5个实数abcde的DCT-I与有8个实数abcdedcb(实偶对称)的DFT完全等价(与此相对的是,DCT II-IV的等价DFT是偏移了半个样本点的)。
注意,DCT-I的N值不能少于2(其他DCT类型的N可以为任何正整数)。
因此,DCT-I对应的边界条件为,在n=0和n=N-1处,x_n都是偶对称的;X_k类似
在这里插入图片描述
DCT-II是最常用的形式,因此通常被简称为“the DCT”。
这种变换(总缩放因子可达到2)完全等价于4N个实数输入的实偶对称DFT(其偶数索引元素值为0)。也就是说,它是有4N个输入y_n的DFT的一半,其中,0≤n<N时,y_2n=0,y_(2n+1)=x_n,0<n<2N时,y_2N=0,y_(4N-n)=y_n。DCT-II也可能使用2N个信号,然后乘以半个移位。
有些算法进一步将X_0乘上1/√2,并将矩阵的结果乘上一个总的缩放因子√(2/N)(见DCT-III中相应的变化)。这可使得DCT-II矩阵正交,但是会打破和输入偏移半个点的实偶DFT的直接对应关系。
DCT-II的边界条件为:在n=-1/2和n=N-1/2处,x_n都是偶对称的;X_k在k=0和k=N处偶对称。
在这里插入图片描述
DCT-III(总缩放因子可达到√2)是DCT-II的逆,这一类型的DCT有时被简称为“IDCT”。
有些算法进一步将x_0乘上√2而不是2,然后将矩阵的结果乘上一个总缩放因子√(2/N)(见上文DCT-II的相应变化),因此DCT-II和DCT-III可以互相转换。这使得DCT-II的矩阵正交,但是破坏了和输出偏移半个点的实偶DFT的直接对应关系。
DCT-III的边界条件为:在n=0和n= N处,x_n都是偶对称的;X_k在k=-1/2和k= N-1/2处偶对称。
在这里插入图片描述
DCT-IV(完全对称,逆就是它本身)若进一步乘上总缩放因子√(2/N)就变成正交矩阵。
DCT-IV的边界条件:x_n在n=-1/2处偶对称,在n=N-1/2处奇对称。
参考自 https://en.wikipedia.org/wiki/Discrete_cosine_transform

四种DCT变换公式的边界拓展情况示意图

参考自 https://en.wikipedia.org/wiki/Discrete_cosine_transform .

五、问答区

1. 第0个余弦变换系数(u, v = 0时)和其他变换系数的系数不一样。第0个是直流系数的意思是什么?

答:当u,v=0时,DCT后的系数若为F(0,0) = 1,则IDCT后的重现函数f(x,y) = 1/8,是个常数值,故将F(0,0)称为直流(DC)系数;当u,v≠0时,DCT后的系数为F(u,v) = 0, IDCT后的重现函数f(x,y)不是常数,故将F(u,v)称为交流(AC)系数。
答案参考自 https://www.cnblogs.com/wengzilin/archive/2013/05/26/3100027.html (关于此答案,有一点疑惑,F(u,v)的取值一个为0,一个为1,可能影响问题的说明,暂不清楚是否为手误打错值了。)

2. DCT的待变换对象是离散的数据点序列,变换的结果也是离散的频率值。但是根据时域和频域理论,时域中的连续(周期性)在频域中表现为离散,时域中的离散在频域中表现为连续(周期性?)。所以DCT结果是对连续的频域做了近似截断处理?

答:(1)序列的N点离散傅里叶变换,时域和频域均看成周期为N的序列,即隐含周期性(关于隐含的周期性的理解可参见百度百科词条“离散傅里叶变换”)。因此DFT看成是离散傅里叶级数的主值区间。(参考自百度知道)
(2)离散傅里叶变换(DFT),是傅里叶变换在时域频域上都呈现离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的,而实际上这两组序列都应当被认为是离散周期信号的主值序列。即使对有限长的离散信号作DFT,也应当将其看作经过周期延拓成为周期信号再作变换。在实际应用中通常采用快速傅里叶变换以高效计算DFT。(参考自百度百科词条“离散傅里叶变换”)

3. 为什么二维变换可以用矩阵表示?

答:由于二维DCT的变换核同时具备可分性 【r(x,y,u,v)=r_1 (x,u)r_2 (y,v)】与对称性【r_1 (x,y)= r_2 (x,y)】,可以用两个一维变换来计算二维变换,即首先沿着输入的行(列)进行一维变换,接着用第一步得到的结果再对列(行)进行一维变换。当变换对的正反变换都满足这个条件时,且f(x,y)是大小为MxM的方形图像时,二维离散的正反变换都可以表示为矩阵形式:T=AF(A^T),其中F表示f(x,y)的MxM矩阵。
注意:左乘为行变换,右乘为列变换,由于二维DCT变换核具有对称性,所以正反变换的公式形式是一样的。此外,DCT为正交变换,A为正交矩阵,即A^(-1)= A^T。公式推导:Y = AX(A^T), X =( A^T)YA = ( A^T) AX(A^T) A。
此答案部分参考自 https://blog.csdn.net/dugudaibo/article/details/78410570

猜你喜欢

转载自blog.csdn.net/allen_sdz/article/details/83279210