DCT
DCT一般用于图像处理。我们使用L2距离来量化编码误差。为了便于观看,我们倾向于保留低频分量。被截断的系数的能量越小,编码误差越小。
如果将DFT作用于图像处理有以下缺陷:由于DFT的信号由周期延拓得到,使得包络和相位不连续,引入高频分量。对此,可以将原序列对称扩展到2N个点,然后做2N点周期延拓。
首先列出DCT的定义: $$ X_{DCT}[k] = \begin{cases} \sqrt{\frac{1}{N}}\sum_{n=0}^{N-1}x[n],k=0\ \sqrt{\frac{2}{N}}\sum_{n=0}^{N-1}x[n]{\rm cos}(\frac{\pi}{2N}k(2n+1)), elsewhere \ \end{cases} $$ 为什么要有k=0的特例?保范。
这个公式实际上来源于2N点延拓的DFT: $$ X_2[k]=\sum_{n=0}^{2N-1}x_2[n]W_{2N}^{kn}=\sum_{n=0}^{N-1}xn = 2e^{j\frac{\pi}{2N}k}\sum_{n=0}^{N-1}x[n]{\rm cos}(\frac{\pi}{2N}k(2n+1)) $$ 可以看到,这个公式与DCT的公式只有一个系数的区别。
$e^{j\frac{\pi}{2N}k}$这个系数来源于何处?实际上观察2N点延拓后的序列,它并非完全偶对称的,其DFT也并非实序列。这一系数可以看做一个平移系数。
DCT的快速算法:
- 2N点DFT$X_1[k]$。
- 取$\frac{1}{\sqrt{N}}Re{X_1[k]e^{-j\pi\frac{k}{2N}}}$,按照k=0调整系数。