版权声明:本文为原创文章,未经博主允许不得用于商业用途。
基本步骤
对于JPEG编码共分五个步骤:
- 色彩转换和重采样
- 图像分割
- FDCT
- 量化
- 系数编码
接下来分别说明这五个步骤的原理。
色彩转换和重采样
由于人眼对与亮度要比色彩敏感,因此可以将RGB图像做色彩转换后对灰度、色调和饱和度进行不同强度的压缩。
对于重采样有两种编码:YIQ和YUV,原理类似。其实从数学的角度无论是RGB还是YIQ、YUV都只是在色彩的三维空间取三组基向量描述颜色信息,色彩转换可以看作从一组基向量映射到另一组基向量。
图像分割
为了降低计算复杂度需要对图像进行88分割,并对色调(I或U)和饱和度(Q或V)分量进行初步压缩,常采用的是421系统,即对U分量每22矩阵求平均,对V分量每2*1求平均,可以分别将对应通道压缩1/4和1/2。
FDCT
FDCT即离散余弦变换,和傅里叶变换类似为一种酉变换。通过FDCT可以类似傅里叶变换将图片从时域映射到频域。由于人眼对高频信息并不敏感,因此可以在频域上再一次压缩。
为了降低计算复杂度针对分割后的8*8矩阵做FDCT。
量化
经过FDCT变换后的图片在实数域上,为了映射到整数域需要做量化,常用方法为乘量化步长后四舍五入取整。由于FDCT为酉变换,因此实际操作时直接对酉矩阵进行量化。
JPEG系统提供了通用的量化表。
系数编码
JPEG对DC分量采用无失真的DPCM编码(一种预测编码技术,通过一个线性函数和之前像素预测下一个像素的值),对AC分量采用行程长度编码(记录连续0的个数)。这是由于DC分量比较接近,而AC分量中0比较多。为了增加连续0的长度,采用ZIG-ZAG排序将图像映射为一维向量后进行哈夫曼(Huffman)编码,这里同样提供通用码表。
解码
解码即为编码的逆过程,且FDCT为酉变换因此可以直接使用相同变换解码。
完整JPEG编码\解码流程如下图: