JPEG-LS(JPEG Lossless Compression)是一种无损图像压缩算法,旨在有效地减小图像文件大小而不损失图像质量。以下是对JPEG-LS算法的详细解析:
一、算法概述
JPEG-LS算法基于一系列的预测和差值编码技术。它首先通过预测每个像素的值来寻找局部像素值之间的相关性,然后计算每个像素与其预测值之间的差值,并将这些差值进行编码。这种预测和差值编码的方法能够显著减少图像数据的冗余,从而实现无损压缩。
二、算法步骤
JPEG-LS算法的执行流程大致可以分为以下几个步骤:
- 上下文参数准备:为实现像素预测做参数准备。这包括计算当前待编码像素的局部梯度值,并根据梯度值对编码模式进行选择。
- 像素预测:使用邻近像素的值来估计当前像素的值。预测值的选择基于上下文参数和先前像素的值。
- 计算预测误差:计算当前像素的实际值与预测值之间的差值,即预测误差。
- 更新上下文参数:根据当前像素的预测误差和先前像素的信息,更新上下文参数以供后续像素预测使用。
- 残差编码:对预测误差进行编码。JPEG-LS使用一个自适应的算术编码器来对这些差分值进行编码,以进一步减少数据的冗余。编码过程可能涉及游程编码、Golomb编码或其他无损压缩技术。
- 算法参数分析:JPEG-LS算法涉及多个参数,如梯度量化门限值参数、量化残差数组、重建残差数组等。这些参数在算法执行过程中不断更新,以优化压缩效果。
三、算法详解
该算法对图像压缩过程中,不需要对图像进行离散余弦变换(DCT)和算数编码等,只进行预测和Golomb-Rice 编码,算法复杂度较低。普通模式下编码步骤为:
a. 求当前像素的上下文参数;
b. 根据上下文模板中的相邻像素值进行预测,得到当前像素的预测值,以上述上下文参数修正预测值;
c. 利用预测值与原像素得到预测误差,对预测误差进行修正编码;
d. 更新上下文的相关参数;
e. 对预测残差进行 Golomb
3.1、算法参数分析
- a\b\c\d均为与当前像素具有特定位置关系的像素点的像素
- x为当前像素
- D1\D2\D3为两两像素之间的梯度(即为做差值)
- Q1\Q2\Q3为梯度量化后值
- T1\T2\T3为梯度量化门限值参数
- Q为根据Q1\Q2\Q3所得到的上下文索引值,用于对A\B\C\D数组进行检索
- A数组为量化残差的绝对值之和,该数组主要用来计算k值
- k值用于编码阶段使用,其决定了如何划分商和余数的关系
- B数组为重建残差的累加,用于计算预测偏差值C
- C数组为上下文平均偏差值(残差修正值)对像素预测值进行修正
- N数组为保存对应上下文出现的次数
- Px为当前像素的预测值,同时也表示Px依据C数据继续宁修正后的修正值
- near为量化失真参数其和位宽有关
- maxval为像素点的上限值
- errval为图像实际值与预测值的差值(残差)
- merrval是对残差分布进行几何变换后的数值
- sign
3.2、算法步骤分析
3.2.1、上下文建模
上下文建模其实就是通过该点像素与附近像素的梯度,得到一个索引参数的过程。该索引参数用于该点像素A,B,C,N参数的寻址和更新。上下文建模包括梯度计算、梯度量化和索引值求解三个部分。
3.2.1.1、梯度计算
其中,c、b、d、a均使用的是像素的重建值。在无损压缩中,像素的重建值即为像素本身;而在近无损压缩中,像素的重建值和像素往往不同,需要先计算出前一个像素的重建值,然后再进行该点像素的上下文建模。这也是在硬件实现时,无损压缩要比近无损模式更加容易实现的原因。
3.2.1.2、梯度量化
根据梯度门限参数T1,T2,T3和量化失真参数Near,将梯度值进行量化,公式如下:
门限参数与量化失真参数Near和像素位宽n有关,其公式如下:
3.2.1.3、生成索引
得到上下文像素的三个梯度量化值之后,需要根据公式来计算该点的上下文索引,通过索引我们就可以访问A,B,C,N
3.2.2、预测
3.2.2.1、对当前像素进行预测
JPEG-LS 使用边缘检测来对当前像素 x 进行预测,即选取 Ra, Rb, Ra + Rb - Rc三个数中间的一个作为前像素 x 的预测值 Px ,公式如下:
3.2.2.2、预测值进行修正
这个过程是基于上下文索引值Q的符号项sign、残差修正值C[Q] 和参数 Maxval(由图像像素精度确定)来修正预测值Px 的。其中 Maxval 取值为图像像素所占比特位数的最大值。通过如下所示方法进行自适应误差修正:
3.2.2.3、预测残差计算
预测残差是图像像素值和其预测值的差值,如下:
sign代表上下文索引Q的符号,Q为负时,sign等于1,否则,sign等于0;
如果是无损压缩模式,则直接对预测残差Errval进行Golomb编码;
如果是近无损压缩模式,还需要对预测残差进行量化和模减;
3.2.2.4 量化和模减
在近无损压缩模式下,可以通过失真量化参数 near 对预测误差 Errval 进行量化,使预测误差 Errval 的绝对值范围进一步缩小,方便进行编码。近无损压缩模式下,量化误差公式如下:
sign代表上下文索引Q的符号。
预测误差的范围为±(Range-1),其中 Range 为图像中像素最大值加 1 得到,由于图像中像素的表示区间为[0,Range-1],实际上长度为 Range 的区间便可以表示所有的预测误差。所以我们可以通过对预测误差进行模减的方式,将误差折叠到(Integer(RANGE/2),Integer((RANGE+1) /2))范围内,这样可以使误差范围进一步收缩,方便编码。
当预测误差 Errval 小于-RANGE/2,便将预测误差 Errval 加上 RANGE 值。在完成这步处理后,若预测误差 Errval 大于等于(1+RANGE)/2,则需要将预测误差 Errval 减去 RANGE 值。经过处理后,所有预测误差 Errval 的值的绝对值都不会大于(RANGE+1) /2。模减的公式如下:
3.2.2.4、上下文参数更新
JPEG-LS 为 每 一 个 上 下 文 环 境 都 相 应 设 置 一 组 上 下 文 参 数A[Q],B[Q],C[Q],N[Q]来保存相应的上下文信息,其中 A[Q]是对量化残差的绝对值的累加器,其作用是估计 Golomb 编码参数 k,B[Q]是对重建残差的累加器,其作用是帮助计算预测偏差 C[Q],C[Q]保存的是对应于该上下文环境的平均预测偏差值,用来修正像素预测值。N[Q]是对应上下文环境的计数器,保存的是该上下文环境出现的次数。
在对图像压缩编码的过程中需要实时更新上下文参数 A[Q],B[Q],N[Q],其中Errval 是指量化模减后的预测误差,Near 是指失真量化参数:
- 这个更新操作每一个像素点编完后都需要进行更新。
3.2.3、编码
3.2.3.1、编码转换
Golomb 编码只能对非负整数进行编码,而量化后的预测残差的符号可正可负,近似服从拉普拉斯分布,而几何分布的 Golomb-Rice 编码效果比较理想,故需要对预测残差分布变换为几何分布,进行映射。公式如下:
当编码字符服从几何分布时,使用可以取得最优效果。较大数字出现的概率远小于较小数字,用较短的码长编码较小的数字,较长的码长编码较大的数字。 以正整数 m 为参数,对 n 进行 Golomb 编码,分为两部分:n%m 的二进制码和n/m 的一元码。对几何分布的被编码变量,总存在一个 m 使得编码后的平均码长最短。 当 m 的取值为 2^k时的Golomb 编码叫做 Golomb-Rice 编码。此时,对 n 的编码就可以表示为:(n/2 的一元码表示)加上 n 的低 k 位 。参数 k 的确定:
对于一个给定的参数m,那么一个整数n(n>0)的Golomb码Gm由两部分组成:[n/m]的二元码表示,和n mod m二进制直接表示,中间用一为二进制1来隔开。其中所谓的二元码表示就是指,所要表示的整数值是多少就用多少个0来表示它。例如当参数m取为4,整数n是9时,那么n的Golomb码G4为0011,可见使用Golomb编码可以讲很多数用小于8个bit的位数来表示,因而达到了压缩的效果。
3.2.3.2、Golomb-Rice编码规则
- 先确定k,k是由A数组对应数据计算的。计算k的目的是使得编码后的平均码长最短。对于k的确定我们遵循以下逻辑。
- 对于一个数N,采用这种编码则具备以下格式特征用一个二元码和一个二进制编码中间间隔1即可。
- 所谓二元码就是是多少就用多少个0来表示
FPGA实现的JPEGLS图像压缩,游程编码模式不易于硬件实现。本项目暂时舍弃这一编码模式。
3.2.4、反量化与像素重建
无损模式不需要反量化。在近无损压缩模式中,通过以下公式,编码器可以得到当前像素 的重建值Rx ,其中 Px为修正预测值,Errval 是量化模减后的预测误差。
四、算法特点
- 无损压缩:JPEG-LS算法保留了图像的每一个像素,因此适用于需要完整保存图像信息的场景。
- 高效压缩:通过预测和差值编码技术,JPEG-LS算法能够显著减少图像数据的冗余,实现高效压缩。
- 自适应性强:JPEG-LS算法使用自适应的算术编码器,能够根据图像数据的统计特性进行动态调整,从而提高压缩效率。
- 支持多种图像格式:JPEG-LS算法不仅适用于灰度图像,还支持彩色图像和其他复杂图像格式的压缩。
五、应用场景
JPEG-LS算法在多个领域有广泛应用,包括但不限于:
- 医学图像:在医学领域,图像的准确性和完整性至关重要。JPEG-LS算法能够满足这些需求,确保图像细节不被丢失。
- 航空航天图像:航空航天领域需要高质量的图像数据来支持任务决策。JPEG-LS算法能够提供清晰、准确的图像压缩和解压缩服务。
- 科学图像:科学研究领域通常涉及大量数据和细节丰富的图像。JPEG-LS算法能够高效地压缩这些图像数据,同时保持图像质量不变。
- 卫星图像处理:卫星图像数据量大,需要高效的压缩技术来减少存储和传输成本。JPEG-LS算法能够提供高压缩比的无损压缩服务。
六、局限性
尽管JPEG-LS算法具有许多优点,但它也存在一些局限性:
- 压缩效果受限:对于包含大量高频细节的图像,JPEG-LS算法的压缩效果可能不如有损压缩算法。
- 不支持高级图像特性:JPEG-LS算法并不支持透明度和动画等高级图像特性,这限制了它在某些应用场景中的使用。
综上所述,JPEG-LS算法是一种高效、自适应的无损图像压缩算法,在多个领域有广泛应用。然而,它也存在一些局限性,需要根据具体应用场景进行选择和优化。
参考: