计算机视觉
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 GIF图像格式和JPEG压缩

在Windows平台上,位图是使用最广泛的图像格式。其他各种文件格式,如GIF、JPEG、TIFF和PNG等,在显示时都转换为BMP后再进行显示。对于视频也遵循这种流程,视频每帧图像解码后称为YUV亮度/色度分量形式,然后转换为BMP格式的数据进行显示。

对于计算机视觉来说,不管是压缩的还是没有压缩的图像和视频,面对的处理对象都会在BMP域中进行处理。其中有一种例外,就是在压缩域进行行为、动作的识别时利用压缩码流中保留的压缩格式语法元素来进行分类、跟踪和识别,语法元素包括运动适量、量化系数和运动模式等信息,但其精度不如空域处理,其速度由于不需要解压缩而比空域处理的速度快,这里不再详细论述。

除BMP这种常用的图像格式外,目前较有特色的其他格式包括GIF和JPEG两种,分别在网页和日常生活中广泛使用。后面简单介绍相关内容。

此外,2015年6月JPEG委员会发起了一个新的标准活动JPEG PLENO,其目标是试图定义一个标准框架,它可以表示和交换如光场、点云和全息成像等更新的成像模式下的图像。其另一个目标就是定义更新的工具来提高压缩效率,同时提供一些用于图像操作、元数据、图像存取和交互及隐私与安全等高级功能。

2.3.1 GIF图像

GIF(Graphics Interchange Format)图像的扩展名采用“.gif”,由CompuServe公司开发,用于屏显和网络。它包括87a和89a两种格式,其中87a描述单一(静止)图像,89a描述多帧图像,通常在GIF动画中使用。它最具特色的特点为其色彩模式,支持28(256色)种颜色。因此,在处理GIF图像时,颜色的数目往往都是256种,有时在计算机视觉处理中,若没有注意则会造成意外结果。而将其他图像保存为GIF图像时,需要对颜色进行量化处理,近些年提出了很多相关的颜色量化算法,比较典型而直观的量化算法就是聚类的算法,通过将类别数目定义为256即可采用通用的聚类算法进行计算。

2.3.2 JPEG图像

JPEG图像格式由JPEG标准化委员会制定,至今仍是最广泛应用的图像压缩标准之一。其采用预测、变换、量化和熵编码的基本思想来进行图像像素数据的压缩。JPEG压缩流程如图2.5所示。

img

图2.5 JPEG压缩流程

根据人类视觉的特性和信息论的观点,其中将RGB图像转换为YCbCr图像利用了人类视觉对亮度信息敏感,而针对色度信息不敏感的特点,可以进一步对色度分量进行下采样以降低数据量。DCT变换和量化则利用信息论中信源编码理论,即当离散信源符号相互独立且均匀分布时,根据信源熵最大原理对信源进行改造使得信源能尽量满足该原理。DCT变换和量化尽量去除信源内部符号之间的相关性,熵编码则使得信源符号的分布尽可能均匀,从而最终达到信息论中要求的离散信源熵最大的条件。实际上,无论如何改造信源,都达不到理想状态。因此,图像压缩领域一直致力于如何更加有效地改造信源来达到更高的压缩效率。

下面我们看一下JPEG压缩的具体流程。首先若原始图像是RGB图像,则转换为YCbCr图像,对YCbCr两个色度分量进行下采样,然后进行8×8的块划分,如图2.6所示。

img

图2.6 对图像进行JPEG编码的分块处理

然后按照从上到下、从左到右的顺序分别对每个块做处理,如图2.7所示,将从图中取出的8×8块表示成fx,y)的矩阵形式。

img

图2.7 JPEG压缩中的8×8块

然后对fx,y)(也就是上面的8×8的块)进行离散余弦变换(DCT),则有

img

相应地,有离散余弦反变换(IDCT)为

img

其中,Fu,v)表示fx,y)的二维离散余弦变换系数,实际上也是一个8×8的矩阵,Eu)可以表示为

img

进一步,若用矩阵表示,则二维DCT变换可以表示为img。其中DCT矩阵元素可以统一表示为:当i=0时,img;当i∈(0,N−1]时,imgN表示变换的大小。当N=8时,其DCT矩阵为

img

关于矩阵表示的方式大家可以从上面DCT变换的公式去推导,或者从傅里叶变换的矩阵表达式去推导。需要注意,为了从傅里叶变换中包含正弦项与余弦项到余弦变换中只包含余弦项,需要将数据处理成对称的形式,而如何将数据处理成对称的形式,有很多种方法,不同的方法对应不同类型的DCT变换。

再回到8×8 DCT变换的矩阵表达式img。容易验证,这时上述定义的DCTmatrix为正交矩阵,因此img。若变换的输入除单个位置为1外,其余全部为0,则正好体现DCT变换基矩阵的属性。8×8 DCT变换的64个基矩阵如图2.8所示。

img

图2.8 8×8DCT变换的64个基矩阵

根据图2.8,可以更好地了解DCT变换的特性。

(1)8×8 DCT变换实际上相当于将输入的块在上述的64个基图像上展开所得的系数,这就是我们所说的DCT变换的系数。

(2)从上述基函数明显可以看出,左上角的基图像为平坦区域,意味着表示原始图像的平滑分量,称为直流系数,其余的DCT系数称为交流系数。

(3)从上述基函数可以看出,越往右下角移动,基函数的变化越快。实际上最右下角的基函数的每个像素点与周围的像素点差别都比较大,因此体现了最快速的变化。从频谱(即对应高频部分)的角度来考虑,常常将DCT变换的系数分为直流部分、低频部分、中频部分和高频部分,分别对应DCT变换系数的最左上角部分、左上角部分、斜对角部分和右下角部分。

(4)从该基图像也可以看出,右上角部分的竖直方向变化缓慢,左下角部分的水平方向变化缓慢,而右下角部分的水平和竖直方向变化都很快,因此DCT变换实际上也在一定程度上对输入图像进行了频谱分析,而根据第1章中的介绍,人眼对不同空间频率变化的敏感程度是不一样的,尤其对高频不敏感,因此高频分量可以多去除一些,这种性质在图像压缩中也获得了实际应用。

(5)通常说DCT变换具有能量聚集特性,即通过DCT变换后,其能量主要集中在左上角部分的DCT系数上。这从上述的基图像中可以得到较好的解释,因为左上角的基图像局部变化比较缓慢,所以与自然图像中局部平滑的特性相对应。可见,具有局部平滑特性的图像在DCT变换后,其低频部分的系数占绝大多数。由此可知,若原始图像是随机图像,则其DCT变换不会具有很好的能量聚集特性。

(6)DCT变换作为从傅里叶变换推导出来的变换,可以利用快速傅里叶变换(FFT)来进行快速计算。

(7)DCT变换为浮点数运算,会造成精度的损失,因此在一些新的图像视频编码标准中,采用整数DCT变换,这样避免了精度的损失,如H.264、H.265等视频编码标准。

下面我们以一个具体的例子来说明JPEG中的DCT变换流程。假设有一个8×8块中的像素值如图2.9所示。

img

图2.9 一个8×8图像块中的像素值

则对其进行二维DCT变换后,得到图2.10。

img

图2.10 对应图2.9中的图像块进行二维DCT变换后的DCT系数示意图

从图2.10中明显可以看出,DCT变换具有能量聚集特性,只有左上角的3×3的系数值比较大,剩余部分的系数均接近于0。

在JPEG压缩中,需要对上述DCT变换系数进一步去相关。由此采用标准的亮度和色度量化表来分别对亮度和色度DCT变换系数进行量化处理。JPEG标准推荐的默认亮度(左图)和色度量化表(右图)如图2.11所示。

显然,从量化表的设计可以看出,右下角的量化因子特别大,从而对应的DCT变换后的系数经量化后,高频部分对应的索引值会很小;而左上角的量化因子比较小,则对应量化后的索引值比较大。

img

图2.11 JPEG标准中默认的亮度块和色度块对应的量化表

注意,若这两个量化表对应JPEG压缩因子为50,则采用默认量化表;若JPEG压缩因子不是50,则需要采用以下公式进行量化表的计算。

img

JPEG主要采用调整量化因子的方法来调整图像的质量,其中QualityFactor为量化因子,注意量化表QuanTable总是为8×8的矩阵,其元素值若小于1,则统一用1表示,即量化表中的任意一个元素的最小值为1。若采用量化因子为50的标准亮度量化表对上述的8×8块进行量化,则量化后的结果如图2.12所示。

img

图2.12 采用量化因子为50的亮度量化表对图2.10中对应DCT系数进行量化后的结果

然后通过如图2.13所示的Zig-Zag扫描成79、0、-2、-1、-2、-1、0、0、-1、0…这样的符号串。这时去除信源符号间的相关性至此结束,后面为无损熵编码。

img

图2.13 JPEG压缩中对量化后系数的“之”字形(Zig-Zag)扫描顺序

最后,再对符号串按DC和AC系数分别编成游程对,接着采用Huffman码表对其进行编码,形成最后的JPEG码流。

在解码时,首先进行熵解码,解码出上述的符号,然后逆Zig-Zag扫描成8×8量化索引符号,再进行逆量化。这里反量化后的结果如图2.14所示。

img

图2.14 对解码出的8×8块量化系数进行逆量化后的结果(注意与图2.10中的数据进行对比)

然后对其进行逆二维DCT变换,再取整,结果如图2.15所示。

img

图2.15 对图2.14中的数据进行逆二维DCT变换并取整后的结果

为了方便与原始输入块进行对比,我们将重构值减去原始输入值,结果如图2.16所示。可以看出,最大差别为5。根据图像处理的基础知识,这个差别一般不会显著影响压缩图像的质量。但是,若图像块的高频细节成分较多,则这时的图像质量损失会较大。根据JPEG压缩的流程和特性,可以采用稀疏表示、深度学习等最新的理论和算法来提高过渡压缩的JPEG图像质量。基于深度学习的图像复原技术可以对JPEG进行质量增强,其最高增益可约达2dB。

img

图2.16 JPEG压缩后再解压缩与原始图像进行差值计算后的结果

从压缩与解压缩的过程中可以看出,压缩后的码流实际上包含量化表和熵编码表的信息。量化表若不是自己设计的,则可以根据量化因子生成;否则需要提供量化表才能正常解码。

此外,经过JPEG压缩后的图像会留下很强的DCT变换量化的痕迹,因此凡是经过JPEG压缩的图像,无论是否保存为其他的图像文件格式,其JPEG压缩过程均有办法恢复,这称为JPEG的压缩历史估计。压缩历史估计在法庭取证(Forensic)中是一种常见的技术。

在计算机视觉中,目前获取的底层图像绝大部分都是JPEG图像,因此需要对相关图像知识有较好的理解和掌握,尤其是DCT变换,常用于视觉任务中的各种特征提取。关于JPEG的更详细的介绍(如熵编码算法),请参考JPEG压缩标准。