【数字图像处理】JPEG联合图像专家组负责静止图像编码

编码原理:
【数字图像处理】JPEG联合图像专家组负责静止图像编码_第1张图片
具体过程:

  1. 将原始图像分为8*8的小块, 每个block里有64pixels:
    【数字图像处理】JPEG联合图像专家组负责静止图像编码_第2张图片
  2. 将图像中每个88的block进行DCT变换:
    数据压缩中有很多变换,比如KLT(Karhunen-Loeve Transform),这里我们用的是DCT离散余弦变换。和FFT一样,DCT也是将信号从时域到频域的变换,不同的是DCT中变换结果没有复数,全是实数。每8
    8个original pixels都变成了另外88个数字,变换后的每一个数都是由original 64 data通过basis function组合而得的,如下图所示为DCT谱中6个元素的由来。
    【数字图像处理】JPEG联合图像专家组负责静止图像编码_第3张图片
    将低频部分集中在每个8
    8块的左上角,高频部分在右下角,所谓JPEG的有损压缩,损的是量化过程中的高频部分。为什么呢?因为有这样一个前提:低频部分比高频部分要重要得多,romove 50%的高频信息可能对于编码信息只损失了5%。
    【数字图像处理】JPEG联合图像专家组负责静止图像编码_第4张图片
  3. 量化:

所谓量化就是用像素值÷量化表对应值所得的结果。由于量化表左上角的值较小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的(人的视觉特性对低频成分更加敏感)。JPEG使用的颜色是YUV格式。我们提到过,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些(人的视觉特性对亮度信息更加敏感)。我们可以对Y采用细量化,对UV采用粗量化,可进一步提高压缩比。所以上面所说的量化表通常有两张,一张是针对Y的;一张是针对UV的。

通过量化可以reducing the number of bits and eliminating some of the components,达到通低频减高频的效果,如下图所示就是两张量化表的例子.
【数字图像处理】JPEG联合图像专家组负责静止图像编码_第5张图片
比如左边那个量化表,最右下角的高频÷16,这样原先DCT后[-127,127]的范围就变成了[-7,7],固然减少了码字(从8位减至4位)。

  1. 编码:

编码信息分两类,一类是每个88格子F中的[0,0]位置上元素,这是DC(直流分量),代表88个子块的平均值,JPEG中对F[0,0]单独编码,由于两个相邻的8×8子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进行编码。

另一类是8×8块的其它63个子块,即交流(AC)系数,采用行程编码(游程编码Run-length encode,RLE)。这里出现一个问题:这63个系数应该按照怎么样的顺序排列?为了保证低频分量先出现,高频分量后出现,以增加行程中连续“0”的个数,这63个元素采用了“之”字型(Zig-Zag)的排列方法,如下图所示。
【数字图像处理】JPEG联合图像专家组负责静止图像编码_第6张图片
JPEG过程的最后步骤是编码量化了的图像。JPEG的编码阶段由压缩图像的三个不同步骤组成。
(1)第一步是将(0,0)处的直流系数由绝对值变为相对值,因为图像中相邻的块表现出了高度的相关。用与前一个直流元素的差来编码直流元素,就回产生一个非常小的数值。
(2)第二步是将图像系数安排成"zig-zag"序列。
(3)最后一步是用两种不同的机制编码。第一个机制是0值的行程编码。第二个是JPEG所称作的熵编码(Entropy Coding),这是根据现实者的选择,用霍夫曼代码或算术编码送出系数代码的一步。
---------熵编码
讲直流元素转换成与上一个之差之后,接下来将DCT块重新排序成Zig-Zag序列,再后,JPEG用一个熵编码机制送出元素,输出带有建立在其中的RLE,它是编码机制的主要部分,基本上,熵编码输出包括三个单词的序列,不断重复直到块结束,三个单词如下:

  1. 行程长度-DCT输出矩阵中,当前元素之前的连续0的个数
  2. 位计数-后面跟着的幅度值所用的位数
  3. 幅度-DCT系数的幅度

你可能感兴趣的:(数字图像处理)