JPEG标准主要采用了基于块的DCT变换编码,同时综合应用了游程编码和霍夫曼编码等。其有损压缩算法编码的大致流程如下:第一步,对图像块(把整个图像分成多个 \( 8 \times 8 \) 子块)进行DCT变换,得到DCT系数;第二步,根据量化表对DCT系数进行量化;第三步,对DCT系数中的直流(DC)系数进行差分预测,对交流(AC)系数按Zig-Zig顺序重新排序;第四步,对第三步得到的系数进行霍夫曼编码。
图1 JPEG基本系统框图
1. FDCT和IDCT:JPEG基本系统以DCT变换为基础,采用固定的 \( 8 \times 8 \) 子块。其表达式如下:
\begin{equation}
F(u,v)=C(u)C(v)\sum_{i=0}^{7}\sum_{j=0}^{7}f(i,j)
\cos{\left [ \frac{(2i+1)u\pi }{16} \right ] }
\cos{\left [ \frac{(2j+1)v\pi }{16} \right ] }
\end{equation}
\begin{equation}
f(i,j)=\sum_{i=0}^{7}\sum_{j=0}^{7}F(u,v)C(u)C(v)
\cos{\left [ \frac{(2i+1)u\pi }{16} \right ] }
\cos{\left [ \frac{(2j+1)v\pi }{16} \right ] }
\end{equation}
\begin{equation}
C(u),C(v)=\left\{\begin{matrix}
1/ \sqrt{2} & u,v=0 \\
1 & other
\end{matrix}\right.
\end{equation}
在JPEG基本系统中,\( f(x,y) \) 为8bit 像素,即取值范围为 \( 0\sim 255 \) ,由DCT变换可求得DC系数 \( F(0,0) \) 的取值范围为 \( 0 \sim 2040 \) ,实际上,同样可以求出 \( F(0,0) \) 是图像均值的8倍,除 \( F(0,0) \) 外的其他系数为AC系数。
2. 量化与逆量化:对低频系数缩小,对高频系数放大,是大部分幅值较小的系数在量化后变为0,然后只剩下一小部分系数需要存储,从而大大压缩了数据量。量化的过程就是每个DCT系数除以各自的量化步长并取整,然后得到量化后的系数:
\begin{equation}
\tilde{F}(u,v)=INT\left [ \frac{F(u,v)}{S(u,v)} \pm 0.5 \right ]
\end{equation}
人眼视觉系统的频率频率响应,随着空间频率的增加而下降,且对于色度分量的下降比亮度分量要快。为此,JPEG为亮度分量和色度分量分别推荐了量化表如下: