光学仪器  2014, Vol. 36 Issue (4): 315-318,322   PDF    
图像无损压缩算法JPEG-LS实现及性能研究
宋鸿梅1, 徐学庆2, 牟海维1, 赵冬岩1    
1. 东北石油大学 电子科学学院, 黑龙江 大庆 163318;
2. 大庆油田有限责任公司第三采油厂地质大队, 黑龙江 大庆 163318
摘要:对图像的无损压缩算法进行了研究,讨论了JPEG-LS图像压缩算法,阐述了该算法的基本原理,对其实现的细节及关键技术进行了深入研究,并用C语言实现了该算法.大量图像压缩实验表明,该算法是一种优越的无损压缩算法,对于多数图像,压缩比可以非常接近无损压缩极限,并且算法的运算时间很少,一幅512×512的8比特灰度图像的压缩和解压缩时间是毫秒级的,完全可以满足实时图像处理的要求.
关键词图像压缩     无损压缩     JPEG-LS     熵编码    
Realization and performance of lossless image-compression JPEG-LS algorithm
SONG Hongmei1, XU Xueqing2, MU Haiwei1, ZHAO Dongyan1    
1. College of Electronic Science, Northeast Petroleum University, Daqing 163318, China;
2. Geological Team Oil Recovery Plant No.3 Daqing Oilfield Co., Ltd., Daqing 163318, China
Abstract: This paper studies a lossless image-compression algorithm, the JPEG-LS algorithm. The basic principles of the algorithm are briefly discussed and the key technologies are deeply studied. Then this algorithm was realized by using the C programming language. Experimental results of the image compression demonstrations show that the algorithm is a superior lossless compression algorithm, and the image-compression ratio can be very close to the entropy limitation, and the consumption of computing time of this algorithm is very low. It only needs some milliseconds to compress and decompress a grayscale image with the size of 512×512×8, and it fully meets the real-time requirements.
Key words: image compression     lossless compression     JPEG-LS     entropy coding    
引 言

按照能否精确重建图像分类,图像压缩有无损压缩和有损压缩两种方式。有损压缩放弃某些人眼容易忽略的信息,达到比较高的压缩比,因而得到广泛应用。无损压缩只是消除了冗余度,而没有任何信息的损失。无损压缩能够达到的压缩比十分有限,因此无损压缩仅应用在相对珍贵或者获取成本高昂的图像保存中,例如珍贵文献的数字资源,医学或遥感图像。但随着电子行业和网络的发展,人们对高品质图像的需求日益增长,日常生活中,人们希望能够完整保存某些有纪念意义的照片。在科学研究中,人们希望把能够记录时代信息的图像完整保存起来,为后世或后来的研究保留完整的资料。但图像资料数据量庞大,存储这些资料给存储设备和网络传输常来很大的压力,只有无损压缩技术的发展才可解决。

无损压缩是没有任何信息损失的压缩,即100%重建原图像,无损压缩极限受其信息熵决定。即对于8位图像,最大压缩比为8/H(x),H(x)为图像信息熵。图像的信息熵不一样,同一种算法对不同的图像压缩比是不一样的。常见的无损压缩方法有预测编码、熵编码和LZW编码等。无损图像压缩算法是上述几种算法的组合,或再辅以某种正交变换。文献[1]系统地评估了以下几种无损压缩算法。但这几种方法都只是针对某一类图像压缩有效,为此联合图像专家组(JPEG)制定了无损压缩标准:JPEG-LS。JPEG-LS综合了预测编码,游程编码以及熵编码,虽然对某一类图像的压缩效果不一定最好,但具有最广泛的实用性。 1 JPEG-LS的编码原理

JPEG-LS依赖于预测编码技术和差值预测环境自适应编码技术,预测编码和环境自适应编码两种技术都涉及到邻域的概念,邻域是当前编码的样本集,用来构建预测结果或者为当前样本值的环境编码。JPEG-LS采用的上下文建模的因果模板(causal template)如图 1所示。图像样本以光栅顺序逐一编码,从图像的左上角开始到右下角[2]

图 1 JPEG-LS的因果模板 Fig. 1 Causal template of the JPEG-LS algorithm

对任意给定样本x[n1,n2]≡x[n]编码时,该邻域包括

为方便起见,通常把当前抽样值和其邻近值分别简写为x[n]xa,xb,xc,xd

2 JPEG-LS的编码说明

对于当前像素x,首先利用其周围相关的像素a,b,c,d计算其三个梯度,根据梯度决定该局部区域是平滑区域还是规则(Regular)区域,如图 2所示,对于前者采用游程(Run-Length)编码,对于后者采用规则模式处理(Regular model)。JPEG-LS的核心就是对Regular model下的编码进行处理[3]

图 2 简单编码流程 Fig. 2 The simplified encoding flowchart

当对图像数据的第一行进行编码时,xb,xc,xd不存在,如图 1所示,这三个值设为0;在当前数据位于行头或行尾时,xa,xc,xd不存在,xa,xd取xb得重建值Rb,xb取上一行的xa得重建值Ra。如图 3所示,方框内为待编码的图像数据。

图 3 图像数据边界处理示例 Fig. 3 An example of the image-edge processing

Regular model模式下编码包括固定预测(fixed predictor),自适应校正(adaptive correction)以及对预测残差的 Golomb编码。 固定预测是通过像素x周围的相关像素a,b,c进行预测,预测函数为

式中,表示定义。

通过预测得到像素x的预测值Px,预测误差包括两部分,一部分为其整数部分(bias),一部分为小数部分(shift),通过自适应校正得到没有整数部分的残差。这一步是通过自适应校正(adaptive correction)来实现的,也称去除整数偏差(bias cancellation)。这一步利用上下文参数(context)通过递归反馈的方式实现[4]

上下文所需要的参数有A,B,C,N,分别用来存储累计的预测误差大小的总和,预测偏差(小数部分)的总和,预测修正误差的正值(整数部分)以及每个对应上下文在编码过程中预测残差发生的次数。A和N用来更新Golomb编码器参数k,N和B用来更新C码中的校验值[3]。上下文A[0,1,…,TOT_CONTEXTS],B[0,1,…,TOT_CONTEXTS],C[0,1,…,TOT_CONTEXTS],N[0,1,…,TOT_CONTEXTS]的索引个数TOT_CONTEXTS 对于A和N中取(93+1)/2=366,B和C中取(93-1)/2=364。上下文参数A,B,C,N需要初始化,之后在对每一像素进行编码过程中不断进行更新和反馈。上下文的索引值选取3个梯度的量化加权和,因此,上下文本质上是反映当前像素点局部区域的活动情况。对3个梯度量化越细,上下文个数越多。根据对称量化区域的概率相等,即

需要合并对称的上下文区间。 对于每梯度9个量化值,则总的上下文个数TOT_CONTEXTS为(93+1)/2=365。开始需要对梯度量化表以及上下文参数A,B,C,N进行初始化配置[5]

最后对经过固定预测以及自适应校正预测后的残差用Golomb编码,Golomb编码本质上是对单边几何分布的熵编码。Golomb编码首先要选择最佳的编码参数k,其生成编码的平均码长是最短的,在JPEG-LS中k值依赖于上下文并且自适应地改变。对经过固定预测和自适应校正后的预测偏差Errva映射到正整数区间,以便进行Golomb编码。映射函数为

码流分两部分,一部分为预测残差对2k 的商unary,用unary个0再加一个1;另一部分为预测残差对 2k的模,用其二进制表示[6]

因此,JPEG-LS压缩编码过程主要分三个部分,自适应校正(adaptive correction),平坦区域的游程编码(run-length coding),规则模式下的Golomb编码。其中最主要的还是自适应校正(adaptive correction),具体体现在上下文参数A,B,C,N在编码过程中的自动迭代更新。解码过程和编码相似,根据事先配置的梯度量化表,上下文参数表以及初始化像素值,逐位解码,解码也要根据情况分析是采用游程解码还是规则模式的Golomb解码。对于Golomb解码是边解码边更新上下文参数A,B,C,N图 4是JPEG-LS的编码流程图。

图 4 JPEG-LS编码流程图Fig. 4 The encoding process of the JPEG-LS algorithm

计算当前像素的梯度值时,需要该像素周围像素值。一般采用扩边方法,即上边扩一行,左扩一列,右扩一列,如图 3所示。

3 实验分析

选用八幅8比特标准灰度图像(512×512)对JEPG-LS进行分析验证。八幅图像如图 5(a)~(h)所示。可以看出图 5中(a)Barbara、(b)Goldhill、(d)Baboon的内容细节信息较为丰富,含有大量的纹理信息,较难获得较高压缩比;(c)Bridge的细节信息较少,图像内容较为简单,一般来说能获得较好的压缩比;(e)Boats和(f)Lena是图像处理人员常用的测试图像,纹理信息和结构信息均较为适中,很具有代表性。

图 5 八幅标准灰度图像 Fig. 5 Eight standard gray images

测试硬件环境为ThinkPad T400,操作系统为Windows XP SP3,软件环境为Visual Studio 6.0,C语言编程。经测试图 5图像JPEG-LS算法的无损压缩比和程序运行时间,得到结果如表 1所示。

表 1 JPEG-LS算法的压缩比和运行时间 Tab. 1 The compression ratio and running time of the JPEG-LS algorithm

从实验结果可以看出,JPEG-LS对各类图像都有良好的压缩性能,图像内容越简单,能够获取的压缩比也越高,压缩解压缩所需运行时间也越少,图像内容越丰富,压缩也比较困难,相应耗费的时间也较多。

表 2中信息熵和压缩极限只是对图像信息熵和图像压缩极限的粗略估计,信息熵是通过整数小波变换所得小波系数的一阶熵,由于小波变换不能完全消除图像像素间的相关性,实际上图像的信息熵要低于我们计算的熵[7]。但从中也可看出JPEG-LS算法在建模和编码两个方面都做得极好,因而JPEG-LS能够达到更高的压缩比。

表 2 图像的信息熵估算 Tab. 2 The estimation of the information entropy of the images
4 结 论

本文对无损压缩算法JPEG-LS的算法原理,实现过程中所需的细节技术做了深入的研究,用C编程语言实现了JPEG-LS压缩算法,并选取大量的标准灰度图像进行实验。实验结果表明:该算法对各类图像均具有良好的压缩性能,压缩比可以达到或超越通过正交变换的各类压缩算法,而且计算的时间消耗低,能够满足人们日常应用的时间需求。

参考文献
[1] SAVAKIS A E.Evaluation of lossless compression methods for gray scale document images[C]//Proceedings 2000 International Conference on Image Processing.Vancouver,BC:IEEE,2000:136-139.
[2] TAUBMAN D S,MARCELLIN M W.JPEG 2000 image compression fundamentals,standards and practice[M].Heidelberg:Kluwer Academic Publishers,2002.
[3] 艾 飞,徐伯庆,孙国强.光学图像的DSP压缩处理[J].光学仪器,2009,31(2):48-51.
[4] JIANG J,GUO B,YANG S Y.Revisiting the JPEG-LS prediction scheme[J].IEE Proceedings-Vision.Image and Signal Processing,2000,147(6):575-580.
[5] 李恒建,王连海,张家树.基于JPEG-LS的高效掌纹图像安全编码算法[J].计算机科学,2013,40(9):141-146.
[6] WEINBERGER M J,SEROUSSI G,SAPIRO G.The LOCO-I lossless image compression algorithm:principles and standardization into JPEG-LS[J].IEEE Transactions on Image Processing,2000,9(8):1309-1324.
[7] WEINBERGER M J,SEROUSSI G,SAPIRO G.The LOCO-I lossless image compression algorithm:principles and standardization into JPEG-LS[J].IEEE Transactions on Image Processing,2000,9(8):1309-1324.