|
MPEG4 & H.264学习笔记之三 ------ 图像模型(图像处理过程)(3) 量化可以被用来在像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)不常发生,但是如果考虑到这些不常发生的情况的时候,重建图像的质量会被轻微地提高.
|