定较少的位数表示,而那些不常出现的数据指定较多的位数表示。用这种方法得到的代码,其码的位数,也即码长就是不固定的,故称为变长码。Huffman在1952年根据香农(Shannon)在1948年和范若(Fano)在1949年阐述的这种编码思想提出了一种不定长编码的方法,也称哈夫曼(Huffman)编码[4]。哈夫曼编码的基本方法是先对图像数据扫描一遍,计算出各种像素出现的概率,按概率的大小指定不同长度的唯一码字,由此得到一张该图像的哈夫曼码表。哈夫曼编码(Huffman编码)是完全依据字符出现概率来构造字符的平均长度最短的码字,又称为最佳编码。
有损压缩是有利用人眼的视觉特性有针对性地简化不重要的数据,以减少总的数据量。有损算法有很多种,比较常见的主要是预测编码、变换编码等。预测编码法中最重要的是线性预测法,通常也成为"差值脉冲编码调制法"(DPCM)。DPCM编码的基本思想是用反馈方法预测估值。变换域编码[5]就是将通常在时间域或空间域描述的信号通过多维坐标的旋转、变换,将原散布在各坐标轴上的能量集中到少数坐标轴上,减少各信号分量的相关性。因此,可以使用较少的编码位数来表示一组信号样本,实现高效率的压缩编码。变换编码是一种有损编码。变换编码中理论上最佳的是K-L变换,其去相关最彻底,但目前尚无快速算法,且变换矩阵随数据集变化,不能广泛应用。而离散余弦变换(DCT)是一种实变换,去相关能力仅次于K-L变换,压缩效果好,压缩比易于调整,压缩率高,易于硬件实现。DCT有固定基,性能最接近K-L变换,现已出现了DCT的多种快速算法。有损压缩方法利用了人类视觉对图像中的某些频率成分不敏感的特性,允许压缩过程中损失一定的信息;虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响较小,却换来了大得多的压缩比。只要损失的数据不太影响人眼主观接收的效果,就可采用。
通过上面简单分析可知,压缩比与图像内容、压缩方法、允许失真的限制等等因素有关。实际编码图像时,也常常采用混合编码方法,甚至一幅图像采用好几种算法在多层次上反复进行处理,其目的当然是为了达到尽可能高的压缩比而不影响图像质量。除了压缩比,衡量压缩效果的常用指标为PSNR(Peak Signal-to-Noise Ratio),但它要和主观评价相配合来对压缩效果进行评价。
2.2 JPEG压缩编码基本原理
图2-1 JPEG压缩编码基本原理图
2.2.1 颜色空间转换 数据分块及采样
在彩色图像中,JPEG分别压缩图像的每个彩色分量。虽然JPEG可以压缩通常的红绿蓝分量,但在YCbCr空间的压缩效果会更好。这是因为人眼对色彩的变化敏感,因而对色彩的编码可以比对亮度的编码粗糙些。这主要体现在不同的采样频率和量化精度上,因此,编码前一般先将图像从RGB空间转换到YCbCr空间。
在颜色空间转换完成之后,再将每个分量图像分割成不重叠的8×8像素块,每一个8×8像素块称为一个数据单元(DU)。在对图像采样时,可以采用不同的采用频率,这种技术称为二次采样。由于亮度比色彩更重要,因而对Y分量的采样频率可高于对Cb、Cr的采样频率,这样有利于节省存储空间。常用的采样方案有YUV422和YUV411。把采样频率最低的分量图像中1个DU所对应的像区上覆盖的所有分量上的DU按顺序编组为一个最小编码单元(MCU)。对灰度图像而言,只有一个Y分量,MCU就是一个数据单元;而对彩色图像而言,以4:1:1的采样方案为例,则一个MCU由4个Y分量的DU,一个Cb的DU和一个Cr分量的DU组成。
图2-2 矩阵分块图
2.2.2 离散余弦变换(DCT)
图像数据块分割后,即以MCU为单位顺序将DU进行二维离散余弦变换。对以无符号数表示的具有P位精度的输入数据,在DCT前腰减去2P-1 ,转换成有符号数;而在IDCT后,应加上2P-1,,转换成无符号数。对每个 8×8的数据块DU进行DCT后,得到的64个系数代表了该图像块的频率成分,其中低频分量集中在左上角,高频分量分布在右下角。系数矩阵左上角的称为直流(DC)系数,它代表了该数据块的平均值;其余63个称为交流(AC)系数。
2.2.3 系数量化
在DCT处理中得到的64个系数中,低频分量包含了图像亮度等主要信息,从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起的人眼的注意,所以在重建图像时,低频分量的重要性高于高频分量。因而在编码时可以忽略高频分量,从而达到压缩的目的,这也是量化的根据和目的。
在JPEG标准中,用具有64个独立元素的量化表来规定DCT域中相应的64个系数的量化精度,使得对某个系数的具体量化阶取决于人眼对该频率分量的视觉敏感程度。理论上,对不同的空间分辨率,数据精度等情况,应该有不同的量化表。不过,一般采用表2-1,表2-2所示的量化表。之所以用两张量化表,是因为Y分量比 Cb和Cr 分量更重要些,因而对Y采用细量化,而对Cb和Cr粗量化。量化就是用DCT变换后的系数除以量化表中相对应的量化阶后四舍五入取整。由于量化表中左上角的值较小,而右下角的值较大,因而起到了保持低频分量,抑制高频分量的作用。
表2-1 亮度量化值表
16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99
表2-2 色度量化值表
17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99
用程序实现量化过程的原理步骤。首先读取Y矩阵中第一个8×8块,与量化系数矩阵中对应的相除,得到的值覆盖回原矩阵,然后做第二个8×8块,一直到做完全部8×8块,然后做CbCr矩阵的量化,用另外一个系数矩阵。经过量化后的DCT系数矩阵,除DC值一般不为零外,AC系数大多是在零点附近的浮点数。量化过程如图2-3 所示:
图2-3 量化示意图
2.2.4 Z形扫描
DCT系数量化后,用Z(zigzag)形扫描将其变成一维数列,这样做的目的是有利于熵编码,Z形扫描的顺序如图2-4 所示:
图2-4 zig-zag扫描示意图
Z形扫描的示意过程如下:假设SB(1)-SB(64)为一个8×8块中的64个元素,元素位置计数从1开始,如图2-5 所示:
图2-5 Z形排序过程
箭头方向表示"Z"字形排序以后原块中元素的新的位置顺序。经过"Z"字形排序以后,新的8×8块中的元素值如下:等式左边表示元素位置,等式右边表示元素值为排序之前某位置中的元素值:如SB(15)=SB(5),则左边表示排序后的8×8块中第15个元素的值等于排序之前第5个元素的值。
SB(1)=SB(1) SB(2)=SB(2)
SB(3)=SB(9) SB(4)=SB(17)
SB(5)=SB(10) SB(6)=SB(3)
SB(7)=SB(4) SB(8)=SB(11)
SB(9)=SB(18) SB(10)=SB(25)
SB(11)=SB(33) SB(12)=SB(26)
SB(13)=SB(19) SB(14)=SB(12)
SB(15)=SB(5) SB(12)=SB(6)
......
SB(61)=SB(48) SB(62)=SB(56)
SB(63)=SB(63) SB(64)=SB(64)
用程序实现的时候需新开一个大小为64的数组SC,把SB的值赋给SC,再把以上等式右边的SB换成SC即可。例如SB(15)=CB(5)换成SB(15)=SC(5)。换完以后即完成一个8×8块的Z字形变换。
2.2.5 编码
编码的主要流程,如图2-6所示:
图2-6 编码的流程图
前面说到变换后的一个8×8频率系数矩阵由一个
上一篇:
房屋租赁管理系统(word文档)
下一篇:
谈初中数学“一元二次方程”的几种常见题型