MPEG4 & H.264学习笔记之三 ------ 图像模型(图像处理过程)
在图像压缩程序中,二维的小波分解被继续应用到LL图中,来组成四个新的子图。得到的新的低通图象继续被得到子图象。很多高频的采样结果都是接近0的,它就可以通过把小值来移除来达到更优化的传输。在解码端,原图像通过上采样,滤波和加值被重建。
3.4.3 量化
量化器把一个在值域X的信号量化减为到值域Y中。使用更小的位来表示量化后的信号是可行的,因为转换后的值域比原来更小了。一个标量的量化器把输入的信号映射到一个量化的输出值域中,而一个向量的量化器把一组输入采样值映射到一组量化值中。
3.4.3.1 标量量化
标量量化的一个简单的例子就是把小数近似到最近的整数上,比如,从R到Z的映射。这个过程是有损的(不可逆的)因为它是无法从被近似后的结果来恢复出原来的小数的。
一个量化的更加通用的例子就是:
FQ = round (X/QP)
Y=FQ * QP
这里QP是量化的步长。量化输出级间隔单一的QP间断值。
在图像或视频的CODEC中,量化操作通常由两部分构成:编码端的前向量化FQ,和解码端的反量化(IQ).(事实上量化是不可逆的,这样用一个更准确的叫法的话:标量器和重标量器。在两个标量值之间的QP步长是一个重要的参数。如果步长很长的话,那么量化值的范围就很小,这样的话就可以在传输过程中被更有效地被表示(高压缩比地压缩).但是重量化值是原信号值的近似。如果步长很小的话,重量化值与原始信号更加匹配,但是量化值就落到一个更大的范围之内,就降低了压缩的效率。
量化可以被用来在像DCT或小波变换之后,除去了小系数之后降低图像数据的精确度。一个图像或视频的前向量化器设计为映射小系数值到0而保留一部分大系数值。前向量化器的输出通常是一个稀疏的量化系数的数组,大都为0。
3.4.3.2 向量量化
一个向量量化器把一系列的输入数据(比如一块图像采样)映射到一个单值(codeword),而在解码端,每个单值(codeword)都映射到一个对于原始输入数据的近似。这组向量保存在编码和解码端,被用来当作一个编码表。在图像压缩中一个典型的向量量化程序如下:
1. 把原始图像分区(比如M × N像素块)
2. 从编码表中选择一个与当前区域最相近的向量
3. 把选定的向量的序号传给解码器
4. 在解码端,用选定的向量来重建一个原始图像的拷贝。
量化是被用在空间域中(比如说用向量量化过的图像采样组),但是它也可以被用在运动补偿或变换数据中.向量量化设计中的关键问题包含编码表的设计和在编码表中有效都查找最优化的向量的问题。
3.4.4 重排列和零编码
量化过的变换系数需要被仔细编码来进行存储和传输。在基于变换的图像或视频编码器上,量化器的输出是一个稀疏的数组,它包含了一些非0的系数和很多的0值系数。重排(把非0系数进行重组)和有效地表示0系数要在熵编码前进行操作。这些过程在DCT和小波变换中被提到了。
3.4.4.1 DCT
系数分布
一块图像或剩余采样的大的DCT系数通常都是在DC(0,0)系数“低频”部分。DCT系数的非0系数都聚在上顶部系数,而分布在水平和垂直方向是大约对称的。对于剩余区域来说,聚集在DC位置的系数是歪斜的,比如说,更多的非0系数在左手边出现。这是因为区域图片在垂直方向有很强的高频成分(因为在垂直方向的子采样),这样因为垂直频率的原因得到了更大的DCT系数。
扫描
在量化之后,块的DCT系数被重排以把非0系数进行组合,以使对于剩余0值的表示方法更加有效。优化的重组方法(扫描方法)依赖于非0DCT系数的分布情况。对于经典的一帧来说,合适的扫描方式应该是zigzag法,它是从左上角的DC系数开始的.从DC系数开始,每一个量化的系数被拷贝到一维数组里面。非0系数在重排数列的最前端被重组,而在之后是很长序列的0值。
zigzag扫描扫描方式对于一个域块可能并不是理想的,因为系数是歪斜分布的,那么一个修改后的扫描顺序可会是有效的,比如说左边的系数在右边系数扫描之前被扫描。
运行级编码
重排过程的输出是一个通常在开始端包含一个或多个簇的非0系数,后面的是一串0值系数。这些0值被编码而实现更优化的表示方法,比如说,通过表示一串0里面的数量来缩减表示位数等等。
例如:
输入数组:16,0,0,-3,5,6,0,0,0,0,-7, . . .
输出值: (0,16),(2,-3),(0,5),(0,6),(4,-7). . .
DCT系数高频部分常被量化为0,这样一个重排的块通常以一串0结尾。一个特殊情况是需要指出一个块中的最后一个非0系数。在所谓的二维运行级编码被使用。每一个运行级对被用上面的方式进行编码,而一个单独的编码符号"last",用来指出最后一个0值的位置。如果三维的运行级编码被使用的话,每个符号编码要编三个量化值:运行度,级数以及最后非0值。如上例就可以写为:
(0, 16, 0), (2,-3, 0), (0, 5, 0), (0, 6, 0), (4,-7, 1)
最后一个码中的1表示这是这个块中最后一个非0值。
3.4.4.2 小波
系数分布
很多在高子波中的系数(右下方的系数值)都是接近于0值的,可以被量化到0而不损失图像的质量。非0系数对应于图像的结构,比如说,在violin图中,弓就有很清晰的垂直结构。当低频中的系数是非0时,有很大的可能性在高频相应的系数也是0。这们设想一个非0的量化系数树,以在低频中根部开始。在第一层的一个单个LL的系数在其他的第一层有相应的系数值。第一层系数位置映射到四个相应的子段的同一位置的系数位置.
零树编码
在熵编码之前越好地编码非0小波系数就越好.达到这一点的一个有效的方法就是从最低层开始编码每个非0系数树.最低层的系数需要被编码,接着是它在高层的子系数,如此反复.编码过程在树达到0值系数的时候一直运行.之后的的全0值的层的子层值都为0.在解码端,重建过程从树根开始,非0系数被解码并重建,当遇到零树的时候,所有的剩余的子结点都被设为0.这嵌入零树(EZW)的小波系数编码方法.编码过程包含一种其他的可能性,0值系数可能跟着(a)一个零树(就像原来那样),或(b)一个非零的子系数阵.(b)不常发生,但是如果考虑到这些不常发生的情况的时候,重建图像的质量会被轻微地提高.

