JPEG标准
JPEG(Joint Photographic Experts Group)是联合图像专家小组的英文缩写。其中“联合”的含意是指,国际电报电话咨询委员会(CCITI)和国际标准化协会(ISO)联合组成的一个图像专家小组。联合图像专家小组,多年来一直致力于标准化工作,他们开发研制出连续色调、多级灰度、静止图像的数字图像压缩编码方法。这个压缩编码方法称为JPEG算法。JPEG算法被确定为JPEG国际标准,它是国际上彩色、灰度、静止图像的第一个国际标准。JPEG标准是一个适用范围广泛的通用标准。它不仅适于静图像的压缩,电视图像序列的帧内图像的压缩编码也常采用JPEG压缩标准。
JPEG的目的是为了给出一个适用于连续色调图像的压缩方法,使之满足以下要求:
(1) 达到或接近当前压缩比与图像保真度的技术水平,能覆盖一个较宽的图像质量等级范围,能达到“很好”到“极好”的评估,与原始图像相比,人的视觉难以区分。
(2) 能适用于任何种类的连续色调的图像,且长宽比都不受限制,同时也不受限于景物内容、图像的复杂程度和统计特性等。
(3) 计算的复杂性是可控制的,其软件可在各种CPU上完成,算法也可用硬件实现。
(4) JPEG算法,具有以下四种操作方式:
① 顺序编码
每一个图像分量按从左到右,从上到下扫描,一次扫描完成编码。
② 累进编码
图像编码在多次扫描中完成。累进编码传输时间长,接收端收到的图像是多次扫描由粗糙到清晰的累进过程。
③ 无失真编码
无失真编码方法,保证解码后,完全精确地恢复源图像采样值,其压缩比低于有失真压缩编码方法。
④ 分层编码
图像在多个空间分辨率进行编码。在信道传送速率慢,接收端显示器分辨率也不高的情况下,只需做低分辨率图像解码。
下面举一个基于离散余弦变换(DCT)的有失真JPEG编解码的示例,了解掌握JPEG编解码的全过程。这两个图表示的是一个单分量(如图像的灰度信号)图像的压缩编码和解码过程,表示出基于DCT顺序工作方式编解码的完整工作过程。对于彩色图像,可以近似看作多分量(亮度信号分量和色度信号分量等)进行压缩和解压缩处理。
基于DCT编码器处理步骤
基于DCT解码器处理步骤
1、离散余弦变化(DCT)
JPEG采用的是8×8大小的子块的二维离散余弦变换DCT(discrete cosine transform)。
在编码器的输入端,把原始图像顺序地分割成一系列8×8的子块,设原始图像的采样精度为P位,是无符号整数,输入时把[0,2P-1]范围的无符号整数变成[-2P-1,2P-1-1]范围的有符号整数,以此作为离散余弦正变换FDCT(forward DCT)的输入。在解码器的输出端经离散余弦逆变换(IDCT)(Inverse DCT)后,得到一系列8×8的图像数据块,需将其数值范围由[-2P-1,2P-1-1]再变回到[0,2P-1]范围的无符号整数,来获得重构图像。
下面的公式是8×8 FDCT和8×8 IDCT数学定义表达式。
正变换:
(4.2)
逆变换:
(4.3)
其中:
从二维DCT的计算公式看出,它们具有可分离的变换特征,所以二维DCT可分解成行向的一维DCT计算和列向的一维DCT计算的组合运算。二维快速余弦变换(2-FDCT)是把8×8块不断分成更小的无交迭子块,直接对数据块进行运算操作。
对基于DCT压缩算法的简单而直观的认识,可把FDCT看作一个谐波分析仪和把IDCT看作一个谐波合成器。8×8数据块输入分解成64个正交基信号,每个基信号对应于64个独立二维空间频率中的一个,这些空间频率是由输入信号的“频谱”组成。FDCT输出64个基信号的幅值称作“DCT系数”,即DCT变换系数值。64个变换系数中包括一个代表直流分量的“DC系数”和63个代表交流分量的“AC系数”。IDCT是FDCT的逆过程,它把64个DCT变换系数经逆变换运算,重建一个64点的输出图像。如果FDCT和IDCT变换计算所使用的设备的计算精度足够高,且系数未经过量化,那幺原始的64点信号就能精确地恢复。
2、量化
为了达到压缩数据的目的,对DCT系数F(u,v)需作量化处理。量化处理是一个多到一的映像,它是造成DCT编解码信息损失的根源。在JPEG标准中采用线性均匀量化器,量化定义为对64个DCT系数除以量化步长,四舍五入取整。
量化的作用是在一定的主观保真度图像质量的前提下,丢掉那些对视觉效果影响不大的信息。不同频率的余弦函数对视觉影响不同,所以可据不同频率的视觉阈值来选择量化表中的元素值的大小。这样通过心理视觉实验,可确定对应于不同频率的视觉阈值,以确定不同频率的量化器步长。
DCT变换系数除以量化表中对应位置的量化步长,其幅值下降,高频系数的零值数目增加。
亮度量化表
16 | 11 | 10 | 16 | 24 | 40 | 51 | 61 |
12 | 12 | 14 | 19 | 26 | 58 | 60 | 55 |
14 | 13 | 16 | 24 | 40 | 57 | 69 | 56 |
14 | 17 | 22 | 29 | 51 | 87 | 80 | 62 |
18 | 22 | 37 | 56 | 68 | 109 | 103 | 77 |
24 | 35 | 55 | 64 | 81 | 104 | 113 | 92 |
49 | 64 | 78 | 87 | 103 | 121 | 120 | 101 |
72 | 92 | 95 | 98 | 112 | 100 | 103 | 99 |
色度量化表
17 | 18 | 24 | 47 | 99 | 99 | 99 | 99 |
18 | 21 | 26 | 66 | 99 | 99 | 99 | 99 |
24 | 26 | 56 | 99 | 99 | 99 | 99 | 99 |
47 | 66 | 99 | 99 | 99 | 99 | 99 | 99 |
99 | 99 | 99 | 99 | 99 | 99 | 99 | 99 |
99 | 99 | 99 | 99 | 99 | 99 | 99 | 99 |
99 | 99 | 99 | 99 | 99 | 99 | 99 | 99 |
99 | 99 | 99 | 99 | 99 | 99 | 99 | 99 |
3、DC系数编码和AC系数的行程编码
64个变换系数经量化后,DC系数是直流分量,即为64个空域图像采样值的平均值。相邻8×8块之间的DC系数有强的相关性,JPEG中对DC系数采用DPCM编码,或差分编码。
其余63个交流系数采用行程编码。从左上方AC01开始, 沿对角线方向,以“Z”字形行程扫描,直到AC77扫描结束。量化后待编码的AC系数通常有许多零值,沿“Z”字形路径进行行程编码,可增加行程中连续零的个数。63个AC系数行程编码的码63个AC系数行程编码的码字,可用两个字节表示。
“Z”字形排列
AC系数行程编码码字
4、熵编码
为了进一步达到压缩数据的目的,需要对量化后的DC码和AC行程编码的码字再作基于统计特性的熵编码。JPEG建议使用两种熵编码方法:哈夫曼(Huffman)编码和自适应二进制算术编码(adaptive binary arithmetic coding)。熵编码可分成两步进行,首先把DC码和行程码字转换成一个中间符号序列,然后给这些符号赋以变长码字。
JPEG静态图像压缩编码主要原理及实现技术概述为以下几点:
① 离散余弦变换(DCT)
首先把一幅图像(单色图像的灰度值或彩色图像的亮度分量或色差分量信号)分成8×8的块按图中的框图进行离散余弦正变换(FDCT)和离散余弦逆变换(IDCT)。
② 量化
为了达到压缩数据的目的,对DCT系数F(u,v)需作量化处理。量化处理是一个多到一的映射它是造成DCT编解码信息损失的根源。在JPEG标准中采用线性均匀量化器。量化定义为,对64个DCT变换系数F(u,v)除以量化步长Q(u,v)后四舍五入取整。
③ 熵编码
为进一步达到压缩数据的目的,需对量化后的DC系数和行程编码后的AC系数进行基于统计特性的熵编码。63个AC系数行程编码和码字,可用两个字节表示。JPEG建议使用两种熵编码方法:Huffman编码和自适应二进制算术编码。熵编码可分成两步进行,首先把DC和AC系数转换成一个中间格式的符号序列,第二步是给这些符号赋以变长码字。
http://it.buu.com.cn/mmshen/data/4-3/1.htm