块傅里叶基和JPEG
块傅里叶基和JPEG
块傅里叶基,是一种用于表示信号的时间-频率基。这些基的使用有两种主要的理由:其一,基于函数分解的正则性,系数呈递减趋势;其二,可将其解释为卡尔霍宁-洛厄夫 (Karhunen-Loève) 基(或某种近似),用于特定的随机过程建模。
连续时间
傅里叶级数
复指数函数族 $e_n(t)=\exp (i 2 \pi n t)$ (其中 $n \in \mathbb{Z}$ ) 是定义在 $L_2(0,1)$ 上的一个正交基。这使得可以在 $L_2(0,1)$ 空间中定义傅里叶级数:
重建公式 (Reconstruction):
傅里叶级数按 $L_2$ 意义上收敛,即:
但这并不保证简单或一致收敛。
分解系数 $F_n$ 的递减速度至少与 $f$ 的 Sobolev意义下的正则性相关。
回顾:如果一个函数 $f$ 属于 Sobolev空间 $H_s$ ,则它属于 $L_2$ ,并且它的导数直到 $s$ 阶都是可定义的。此外,如果 $f$ 的支撑严格包含在 $] 0,1[$ 中,则:
我们有:$F_n^{(s)}=(-2 i \pi n)^s F_n$,且$f^{(s)} \in L_2(0,1)$。假设$f$的支撑严格包含在$]0,1[$。观察:
块傅里叶基
为了从 $L_2(0,1)$ 上的基扩展到 $L_2(\mathbb{R})$ ,需要在整个实数轴上表示函数。具体方法是将定义在 $[0,1]$ 区间内的函数 $f$ 进行分段扩展:将其分割为多个区间 $[m, m+1]$ 的函数片段,每个片段由函数 $f$ 在 $[0,1]$ 上的行为通过平移实现:
由于函数通常没有理由满足周期性条件,因此系数的递减通常非常缓慢。
余弦基 Bases de cosinus
为了获得令人满意的递减性质,可以使用余弦基。
Neumann-Neumann 余弦基
Neumann-Neumann 余弦基满足 Neumann 边界条件,即基函数的导数在边界处为零。这对应于函数的平滑延拓,避免了周期性假设下可能出现的不连续性问题。
由于余弦基在边界处是平滑的,分解的系数$F_n$能以较快速度递减。这种性质弥补了块式傅里叶基在边界处引入不连续性的问题
Neumann-Dirichlet 余弦基
该余弦基在 $[0,1]$ 的两端分别满足不同的边界条件:
- 在 $t=0$ ,满足 Neumann 边界条件(导数为零)。
- 在 $t=1$ ,满足 Dirichlet 边界条件(函数值为零)。
- 这意味着函数在一端光滑,但在另一端具有较强的约束(函数值为零)。
Neumann-Dirichlet 余弦基通常无法恢复快速递减的傅里叶系数,因为它在边界 $t=1$ 的 Dirichlet 条件会引入较大的不连续性。这种不连续性影响了系数的平滑性和递减速度。
有限维度
在本文中,向量的索引从 0 开始。
离散傅里叶变换(Transformée de Fourier discrète,简称 TFD)
向量族 $\left(em\right){m=0, \ldots, N-1}$ 的定义为:
该族在常数因子上是复数域 $\mathbb{C}^N$ 中的一个正交基。
维度为 $N$ 的向量 $\mathbf{x}$ 的离散傅里叶变换(TFD)通过以下基变换给出:
其中$F$有$FF^H = NI$
离散傅里叶变换可以看作一种 Karhunen-Loève 基。对于协方差矩阵是循环矩阵的随机向量,傅里叶基正是其 Karhunen-Loève 基。
DCT-I 和 DCT-III:DCT-I 和 DCT-III 的性质与 DCT-II 和 DCT-IV 相似,但它们的对称性和索引定义不同。例如,DCT-I 的对称点为 $0$ 而非 $-1 / 2$ 。
DCT-II 是最常用的变换类型,广泛用于图像压缩(如 JPEG)和信号处理。
DCT-IV 的应用相对较少,但在某些特定场景下,如需要额外的紧凑性或特定边界条件时,是一种有效的选择。
DCT-II 离散余弦变换-II
DCT-II的基向量为:
其中:
- $\lambda_0=\sqrt{2}$ ,此外 $\lambda_m=1$ ;
- $N$ 是向量维度;
- $m, n$ 分别是基向量和数据的索引。
- 对于大的 $N$ ,DCT-II 基逐渐接近于平稳过程的 Karhunen-Loève 基。这表明,DCT-II 在统计意义上是最优的,用于分解和表示平稳信号。
- 类似于 Neumann-Neumann 余弦基,DCT-II 通过改变基,可以有效处理非周期信号,且分解系数 $c_{m n}$ 的递减性质依然良好。
DCT-IV(离散余弦变换-IV)
DCT-IV的基向量为:
- DCT-IV 通常不会单独使用,而是用于更紧凑地计算 DCT-II,或者用于 Neumann-Dirichlet 基的连续版本。
JPEG编码
JPEG格式是目前最常用的有损图像压缩格式之一。
编码算法分为以下步骤:
- 基于减少熵的分解信号;
- 量化;
- 编码。
每个编码器因这三个步骤的实现选择而有所不同。
为了进行图像编码,添加了一个颜色处理的初始步骤。
颜色处理
描述像素的三个RGB(红、绿、蓝)值被替换为 $Y^{\prime}, C_B, C_R$ (亮度和两个色度值),定义如下:
逆变换为:
这里的RGB值经过了非线性校正,因此标记为’。
这种转换可以部分解耦三个通道,并将人眼非常敏感的亮度信息与颜色信息分开。颜色信息随后可以以因子2进行下采样。
信号分解
用于信号分解的最优基是 Karhunen-Loève(卡尔霍宁-洛伊夫)基。然而,它取决于图像模型,并且通常没有允许快速计算的结构。
因此,一般更倾向于使用基于 $8 \times 8$ 块的二维DCT-II(离散余弦变换II)。如上所述,DCT对于平稳过程近似于Karhunen-Loève基,并且可以高效计算。
下面的代码提供了一个例子。
1 | def dct8(img): |
分解后的熵将有效减少

量化
在JPEG格式中,量化可以根据系数使用不同的权重。这是为了考虑人眼对不同频率的敏感性。
实际上,定义具有权重 $w_n^2$ 的量化误差为:
这等价于将前面课程中的定理应用于加权系数 $X_n^w=X_n / w_n$ 。
因此,量化步长为 $\Delta_n=w_n \Delta$。
对总误差影响最小的系数被粗略量化。
这些量化步长由编码器根据用户提供的质量目标确定,并存储在文件中。
通常,量化步长随频率增加。每个编码器使用的量化参数不同,因此不同编码器的参数并不具有相同的效果。
编码
目的是降低系数的熵,但必须很好地对其进行编码才能实现这一目的。
DCT(离散余弦变换)中平均值系数(第一个系数)单独编码,方法是对连续系数之间的差值进行编码。
对于其他系数,由于系数递减与量化步长随频率增大的结合,会出现大量零系数。这些系数按照之字形顺序存储,以使零序列尽可能长。
使用以下编码规则:
- 4位编码系数数量 $Z$,即在第一个非零系数前的零数量;
- 4位编码用于编码系数的位数 $L$;
- $L$ 位用于编码系数的值。
特例:
- $(15, 0)$编码16个零系数的序列;
- $(0, 0)$表示一个块的结束,当最后的系数全为零时。
成对的 $(Z,L)$使用由编码器确定的霍夫曼编码(Huffman code)存储在文件中(或使用算术编码)。
通常,解码器是完全特定的。编码算法由其设计者自行决定,但需确保文件可以被解码。
在颜色信息的子采样、量化等操作允许的范围内,可以选择最佳的质量、位数与计算复杂度的折中方案。






