DCT

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的快速算法:

  1. 2N点DFT$X_1[k]$。
  2. 取$\frac{1}{\sqrt{N}}Re{X_1[k]e^{-j\pi\frac{k}{2N}}}$,按照k=0调整系数。
Built with Hugo
Theme Stack designed by Jimmy
visitors: total visits: time(s) reads: time(s)