JPEG(baseline)压缩综述(3-2)

量化 
   
  在8×8像素块上完成DCT变换之后,为了在压缩比方面获得大的提高需要量化过程。量化过程指的是用一组预定的容许值之一代表实际系数值的过程,以便可用较少的位数对全部数据编码(因为该容许值是所有可能的值中的一小部分)。 
  请记住人眼对低频分量的图像比对高频分量的图像更敏感。因此,高频分量的图像中的细小错误不容易被发现,所以完全去掉一些高频分量通常在视觉上可以接受。JPEG算法中的量化过程正是利用这一特性来降低对给定8×8像素块编码所需要的DCT信息量。 
  在JPEG处理中,量化是不可逆的关键步骤。虽然完成一个DCT反变换由于舍入误差将不能精确地恢复原始输入的8×8输入矩阵,但是其结果通常视觉上完全能接受。然而,由于量化后原来未量化的系数的精密度会永久地丢失,所以量化仅用在有损压缩算法中,例如,我们在这里讨论的JPEG(BASELINE)压缩算法。 
  当量化表建立好之后量化过程就很简单,但是量化表本身也可能非常复杂,对8×8 DCT变换输出数据块的每个元素通常具有一个单独的量化系数。因为这个输出矩阵对应于其输入像素块与64个DCT基函数关系的密切程度,并且可以用实验方法测定每个DCT频率对人眼的重要性,并且由此做相应的量化处理。换句话说,频率朝着图2示出的基函数的右下角方向的变化趋势有助于在它们的整个量化表中出现大的频率值,因为这将有助于使DCT输出块中较高频率分量系数变成零。量化的实际过程是在对于给定的行和列,DCT输出系数与量化系数的简单元素相除。 
  “质量比例系数”可适用于量化矩阵以平衡图像质量和压缩图像尺寸。对于在JPEG标准中提到的示例表格,典型的质量值范围为从0.5(高恢复图像质量)到5(高压缩比)。 
  量化后的二维系数要重新编排,并转换为一维系数,为了增加连续的“0”系数的个数,就是“0”的游程长度,JPEG编码中采用的Z字形编排方法。 
  
   
  Z字形编码 
   
  接下来,我们准备按照一种有效的编码方式对量化后的二维系数要重新编排。正如我们从DCT输出中看到的,随着水平方向和垂直方向频率值的增加,其量化系数变为零的机会越来越大。为了利用这一特性,我们可将这些二维系数按照从DC系数开始到最高阶空间频率系数的顺序重新编排为一维系数,如图3所示。通过使用Z字形编码方法实现这种编排,即在8×8像素块中沿着空间频率增加的方向呈“Z”字形来回移动的过程。在图3的左边,我们可看到对DCT量化后输出的矩阵系数。使用图3中部示出的Z字形编排模式,我们能产生一个如图3右边示出的一维系数。 
  每个量化后的DCT输出矩阵都经过Z字形编码过程。从DCT二维系数生成的64×1一维数组中的第一个元素代表DC系数,其余的63个系数代表AC系数。这两类系数完全不同足以将它们分开,并且可采用不同的编码方法以获得最佳压缩效率。 
  必须对所有的DC系数(每个DCT输出块中有一个)分组放在一起。因此,对DC系数组和每个AC系数组分别编码。 
   
  DC系数编码 
   
  DC系数代表每个8×8像素块的亮度(数值比较大)。因此,在相邻像素块之间存在很大相关性(DC系数值变化不大)。虽然仅靠其自身不能公正地预测任何给定输入数组的DC系数,实际的图像通常在局部区域变化不大。因此,我们可以用以前的DC系数预测当前的DC系数。我们通过使用差分预测技术〔差分脉冲编码调制(DPCM)〕对相邻图像块之间的DC系数的差值进行编码,能增加对数值很小的系数进行编码的可能性,从而降低压缩图像中的位数。 
  
  图3: 有效的Z字形编码方式示意图 
   
  为了获得编码值,我们简单地从当前的像素块中的DC系数减去以前处理过的8×8像素块的DC系数。这个差值被称为“DPCM差值(Δ)”。该差值一旦计算出来,与一个表比较以确定它属于的符号组(根据其幅度),然后使用熵编码方法(例如,霍夫曼编码)进行适当的编码。 
   
  AC系数编码(游程编码) 
   
  由于经过量化步骤后有许多AC系数值变为零,所以对这些系数要采用游程编码(RLE)。游程编码的概念根据一种简单的原理。在实际图像序列中,相同值的像素总可以用单个字节表示,但是把相同的数值一遍又一遍地发送没有意义。例如,我们看到量化后的DCT输出数据块产生许多系数为零的字节。Z字形编排有助于在每个序列末尾产生系数为零的数组。 
  我们首先在给定“行程”长度中简单地对零的个数编码,而不是对每个零单独编码。然后通常使用霍夫曼可变字长编码器(VLC)提供游程编码信息。 
   
  熵编码 
   
  对上面介绍的JPEG系数序列做进一步压缩称作熵编码。在这一阶段,对量化后的DCT系数完成最终的无损压缩以提高总压缩比。 
  熵编码是一种使用一系列位编码代表一组可能出现的符号的压缩技术。图4示出了一种明显的2 bit编码序列对应4种可能出现的符号(A,B,C和D)。 
   
  图4: 具有相等符号概率的熵编码示例 
   
  在这个例子中,我们能用两位信息惟一地描述每个符号。因为每个符号都可用2 位信息表示,我们称这种编码为“定长码”。定长码最常用于每个符号以相同的概率出现的系统中。 
  实际上,大多数符号并非以相同的概率出现。在这种情况下,我们可利用这样的事实来减少用于压缩数据所用的平均位数。每个符号所采用的编码的长度可以根据该符号出现的概率改变。通过对出现频度比较高的符号分配比较短位数的代码,而对出现频度较低的符号分配比较长位数的代码,我们很容易改进对压缩数据编码所用的平均位数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值