c语言 自适应模式算术编码,JPEG-LS图像编码算法分析和研究

JPEG-LS是基于LOCO-I算法的无损/近无损图像压缩标准,适用于数字相机、网络传输等领域。LOCO-I结合了Huffman编码的简单性和上下文建模的高效性,通过非线性预测和Golomb-Rice编码实现低复杂度高压缩比。本文深入分析了预测、上下文建模、Golomb-Rice编码及游程编码等关键步骤,并用C语言描述了编码流程。
摘要由CSDN通过智能技术生成

JPEG-LS图像编码算法分析和研究

JPEG-LS是在ISO/ITU的新标准中用于对静态连续色调图像进行无损或进无损压缩的一种算法。该算法具有实现复杂度低,保真度高等特点,因而广泛应用于数字相机、网络传输、无线通讯以及医学成像等领域。本文就JPEG-LS的核心算法LOCO-I以及其编码流程进行详细的分析和研究。

1.

简介

无损压缩就是指经过压缩并重建后的图像和原图像完全一样,没有任何损失。如果重建图像和原图像存在差距,而误差被限制在一定的范围内就称作近无损压缩。近无损压缩虽然有所损失,但对视觉影像却很小,也可以认为是无损的。有很多无损或近无损的图像压缩算法,例如传统的JPEG无损模式、FELICS、CALIC等等。首先,我们来大概了解一下其中一些有名的算法[1]。

JPEG无损模式:它是JPEG标准中用于无损压缩的一种独立模式,它使用基于空间域的非量化的DPCM预测编码(差分脉冲编码),然后对预测误差进行Huffman编码。因此,用这种方式压缩的图像经重构以后和原图像完全一样的。它仅使用周围的几个像素对当前像素进行预测,预测公式如下:

a4c26d1e5885305701be709a3d33442f.png

对于a1、a、a3、a4这四个系数,可以从预测表中选择,该表提供了8中不同的系数的线性组合。显然,这种方法的好处是简单,但其缺点是很难到达较高的压缩比。

FELICS(Fast,Efficient,Lossless Image compression)[2]:FELICS是一种和JPEG无损模式的压缩比相当的压缩算法,但是其速度却是JPEG无损模式的将近5倍。这种算法巧妙的运用的当前像素的两个相邻像素进行预测和误差建模。它使用单比特,修正的二进制码,以及Golomb-Rice 编码[1]。该编码系统在保持较低的压缩比损失的情况下,大大提高了编码速度。FELICS使用了光栅扫描顺序,并使用当前像素最邻近的两个像素来直接获取一个近似的误差概率分布,有效的结合了预测和残差建模的相关步骤。在编码时,它会再一个误差模型集合中选择最适合的一个,最终用该模型对应的前缀码来完成编码。

CALIC(Context-based Adaptive Lossless/Nearly-Lossless

Coding)[3]:它是一个用于连续色调静态图像的基于上下文的只适应的无损/近无损预测编码体系。他使用当前像素行的前两行像素作为上下文模板,并使用一个巧妙的非线性上下文预测器。CALIC有连续色调模式和二进制模式两种。正常情况下使用连续色调模式,对像素进行预测和误差建模然后使用自适应的算术编码;而当进入大片的色调变化很平坦的区域时则进入二进制模式,即对当前平坦区域中的两种较单调的色调信息进行编码。高效的上下文建模和量化技术使得CALIC同时有着较低的时间、空间复杂度。目前为止,CALIC编码的平均比特最少。

2.JPEG-LS

JPEG-LS是一种新的针对连续色调静态图像的无损/进无损的压缩标准,ISO-14495-1/ITU-T.87。他的核心算法是LOCO-I(LOw Complexity Lossless Compression for

Images)。它是一种新颖的压缩算法,它结合了Huffman编码的简单地复杂度和上下文建模的压缩潜力,因此被描述为“enjoying the best of both

worlds”。LOCO-I算法可以获得和目前的诸多基于算术编码的压缩算法相似甚至更好的压缩效率,同时又能保持较低的复杂度。它的整体编码框图如图1所示[4]。

a4c26d1e5885305701be709a3d33442f.png

图 1:JPEG-LS 编码框图

无损图像压缩通常由两个独立的部分组成:建模和编码。建模部分可以归结为一个归纳推导过程,在这个过程中,按照事先规定的某种顺序(例如光栅扫描顺序)观察每一个像素。在扫描过前i个像素xi=x1x2…xi之后,我们希望指定一个条件概率分布p(·|xi)来推断下一个像素xi的值。在理想情况下,xi+1的平均编码长度为-log p(xi+1|xi)bits,其中对数的基为2。因此,我们期望得到一个非均匀的概率分布,使得下一个像素有一个坑能性较大的值。在顺序模式,概率分布p(·|xi)从过去像素学习而得,由于在解码端同样按顺序解码出以前的像素,所以同样可以得到这个概率分布。而在双行程方法中,条件概率分布经过第一次扫描从整个图像学习而得,而第二次扫描才开始真正的编码,同时这个概率分布模型必须以头信息的格式被传送到解码端。因而在这种模式下,总的编码长度包括信息头的长度。

理论上,我们可以通过大规模的条件区域或“上下文”来获得更加歪斜或不均匀的概率分布,但是这无疑会增加统计模型的参数数量,从而导致建模代价抵消了部分编码效率,形成“上下文稀释”效应。不管在顺序模式还是双行程方法中,建模代价和统计模型中自由参数的个数是成正比的。

在目前的无损图像压缩方法中,概率的分配被分成了三项工作:

—预测,通过先序像素集合xi的一个子集来预测下一个像素xi+1的值xp

—确定xi+1的上下文,通常为过去子列的一个函数

—给定xi+1的上下文预测误差ei+1=

xi+1-xp的概率模型

受高复杂度的通用模型的启发,LOCO-I找到了优化这些步骤的方法。目前大部分编码算法都会使用算术编码来消除冗余熵,尽管这种方法很有效,但是再很多应用场合,实现起来还是比较复杂的,尤其是软件执行的时候。而又有些算法以低复杂度为主要目标,采用传统的DPCM技术,然后对线性预测后的残差进行Huffman编码,虽然复杂度降低了但却无法达到较高的压缩比。

LOCO-I算法结合了Huffman编码的简单(相对于算术编码)和上下文建模的巨大压缩潜力,因此取了众家之长。该算法使用了一种具有边缘自检测功能的非线性预测器,并且基于一个非常简单的由量化梯度决定的上下文模型。该方法用少数几个统计参数实现了复杂的通用模型技术所能实现的效果,而且没有“上下文稀释”作用。在该方法中,通过一个自适应的Golomb-Rice编码使每个上下文对应一个单参数概率分布,而且在平坦区域使用嵌入式字母表扩展机制。令一种复杂算法FELICS也是基于Golomb-Rice编码的,单LOCO-I和它的不同之处在于LOCO-I更遵循传统的预测-建模-编码模式,使用一种新颖而简单明确的Golomb-Rice参数估计方法。在保持同样的低复杂度情况下,LOCO-I比FELICS的压缩效率提高了很多。同样,LOCO-I比目前很多方法的压缩比都高,而复杂度相对较低。事实上,ISO/IEC JTC1/SC29WG1委员会正在考虑是否用JPEG-LS来代替目前的低复杂度无损压缩标准[5]。

在接下来的章节里,我们将对JPEG-LS的编码流程及其核心算法LOCO-I进行详细的讨论。首先在2.1节,我们将探讨如何对当前像素进行预测以及如何获取周围像素的梯度值用于后续的建模;接着在2.2节我们将分析LOCO-I巧妙的上下文建模过程;在2.3节,将会阐述Golomb-Rice编码过程;紧接着在2.4节将讨论用于游程编码的嵌入式字母表扩展机制;最后,本文会对JPEG-LS的整个编码流程做一个简洁的概括。

2.1 预测

JPEG-LS中的预测和建模单元都是基于图2中所显示的因果模板的,其中,x表示当前像素,a、b、c、d和e代表相邻像素。他们的位置关系见图2。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值