JPEG是Joint Photographic Exports Group的英文缩写,中文称之为联合图像专家小组。
JPEG专家组开发了两种基本的压缩算法、两种熵编码方法、四种编码模式。如下所示:
压缩算法:
(1)有损的离散余弦变换DCT(Discrete Cosine Transform)
(2)无损的预测压缩技术;
熵编码方法:
(1)Huffman编码;
(2)算术编码;
编码模式:
(1)基于DCT的顺序模式:编码、解码通过一次扫描完成;
(2)基于DCT的渐进模式:编码、解码需要多次扫描完成,扫描效果由粗到精,逐级递增;
(3)无损模式:基于DPCM,保证解码后完全精确恢复到原图像采样值;
(4)层次模式:图像在多个空间分辨率中进行编码,可以根据需要只对低分辨率数据做解码,放 弃高分辨率信息;
1.分块
JPEG 编码是以每8x8个点为一个单位进行处理的.所以如果原始图片的长宽不是8的倍数,都需要先补成8的倍数,使其可以进行一块块的处理。将原始图像数据分为8*8的数据单元矩阵之后,还必须将每个数值减去128,然后一一带入DCT变换公式,即可达到DCT变换的目的。图像的数据值必须减去128,是因为DCT公式所接受的数字范围是-128到127之间。
2.DCT变换
DCT中变换结果没有复数,全是实数。低频部分集中在每个8*8块的左上角,高频部分在右下角。
3.量化
量化:像素值÷量化表对应值所得的结果。由于量化表左上角的值较小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的。JPEG使用的颜色是YUV格式。我们提到过,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些。我们可以对Y采用细量化,对UV采用粗量化,可进一步提高压缩比。所以上面所说的量化表通常有两张,一张是针对Y的;一张是针对UV的。
量化过程实际上就是对 DCT 系数的一个优化过程。它是利用了人眼对高频部分不敏感的特性来实现数据的大幅简化。量化过程实际上是简单地把频率领域上每个成份,除以一个对于该成份的常数,且接着四舍五入取最接近的整数。这是整个过程中的主要有损运算。以这个结果来说,经常会把很多高频率的成份四舍五入而接近0,且剩下很多会变成小的正或负数。整个量化的目的是减小非“0”系数的幅度以及增加“0”值系数的数目。量化是图像质量下降的最主要原因。因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表:亮度量化值和色差量化值。
4.编码
由于两个相邻的8×8子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进行编码。8×8的其它63个元素是交流(AC)系数,采用行程编码。这里出现一个问题:这63个系数应该按照怎么样的顺序排列?为了保证低频分量先出现,高频分量后出现,以增加行程中连续“0”的个数,这63个元素采用了“之”字型(Zig-Zag)的排列方法。
reference:
http://blog.chinaunix.net/uid-24517893-id-3074462.html
http://jilie0226.blog.163.com/blog/static/36792254200902072746964/