前序傅立叶变换,离散傅立叶变换,推荐这个回答的介绍
想和大家讨论一下jpeg中的dct变换,为什么有效?它有什么更深层次的本质吗?www.zhihu.com全篇参考下文,英文较好可以直接看。
ucsd ece161www.svcl.ucsd.edu预备概念
- 能量聚集(energy compaction):
- 代表能把松散能量序列打包进尽可能少的频率分量的能力。
- 对于图像压缩十分重要
- 当聚集成都较高,只需要传递很少的分量而不是整个像素点集。
- 为什么能量聚集十分重要?
- 主要原因是图像压缩。
- 可以对其他的应用更加友好。
- round()函数
- 向最近的整数进行取整数操作。
- round(1) = 1; round(0.55543) = 1; round (0.0000005) = 0。
- 量化器是?
- 通过将原本的输出区域进行层次的划分。
- 在输入为某一个范围时,将其映射为相同的输出。
- 实施一个量化器
- 定义量化器的步长
。
- 应用round函数
-
- 此时,
越大,我们会有越少的再现层次。
- 更大的压缩的代价将是更严重的失真。
- 此时,
- 图像压缩
- 本身的DCT变换不会引入更多的扭曲失真和保存更多bit。
- 这些来自于丢掉信息时进行的量化器所造成的“损失压缩”。
- 通过对图像进行DCT操作,再使用对DCT后的图像量化,再逆DCT回去,得到的图像就是经过了简单压缩后的图像。
Discrete Cosine Transform(DCT)
- DCT性质
- 在直方图中有更好的聚集程度。
- 可以省去很大一部分的分量。
- 在同一程度的失真上能保存更多的比特。
- 这里是DCT-II, even symmetric DCT, "the DCT",公式:
- 正变换:
- 逆变换:
- 正变换:
- 其中,
- 从DFT的公式推导:
- Step1:创建对称采样序列
- Step2: 计算
个点下的DFT
- Step3:将上式重写为仅含有N个项的式子
- Step1:创建对称采样序列
-
- 将
换,令
- 为了将其写成cosine形式,需要将其变化为两个镜面的指数。然后根据欧拉公式中
推导结束。此时,有DFT和DCT的关系 :
DCT公式为:
这三个步骤可以总结为
- 从公式中分析为什么比有更好的能量聚集效果:
- 在扩展时,DCT采用的是对称的形式,而DFT和DFS相同采用周期扩展。
DFT中扩展序列时,是直接采用平移方式引入了不连续的区间,而DCT采用对称形式,消除了这一人为的不连续,而通常高频信号隐藏在这人造的不连续中。这也正是为什么DCT的能量聚集效果会更好。
- 快速算法
- 考虑到DCT的过程可以解释为
- 根据这几个步骤,可以得出相应的快速算法。
- 考虑到DCT的过程可以解释为
-
-
,这里可以采用计算2N-pt的FFT计算
- 根据公式
- N-pt的DCT算法复杂度也就是2N-pt的DFT的复杂度。
二维DCT公式:
- 流程:
-
- 并且有
- 以及
-
-
- 公式:
- 正变换:
- 逆变换:
- 其中:
- 正变换:
- 快速算法:
- 意味着2D-DCT可以通过分别计算行和列上的1D-DCT序列实现
- 2D-DCT计算需要
- 做
次数的1D-DFT
- 然后是
次数的1D-DFT
- 总算法复杂度有:
- 也就是,做2D-FFT包括
- 对行序列做1D-FFT
- 对列中间序列做1D-FFT
- 做