算法概括
简介
- JPEG-LS(JPEG Lossless Compression)是一种无损图像压缩算法,旨在有效地减小图像文件大小而不损失图像质量。相比于传统的JPEG压缩(有损压缩),JPEG-LS保留了图像的每一个像素,因此适用于需要完整保存图像信息的场景
- JPEG-LS算法基于一系列的预测和差值编码技术。首先,它通过预测每个像素的值来寻找局部像素值之间的相关性。然后,通过计算每个像素与其预测值之间的差值,将这些差值进行编码。
应用
- 医学图像:在医学领域,图像的准确性和完整性至关重要。
- 航空航天图像:在航空航天领域,图像的准确性和清晰度对于任务的成功至关重要。利用航空摄影、卫星遥感等技术获取的地球表面信息的图像。在遥感领域,图像数据的准确性、完整性和高效的传输都是非常重要的,而JPEG-LS算法恰好能够满足这些需求,因此在处理和传输遥感图像时常常会使用JPEG-LS算法。
- 科学图像:在科学研究领域,图像通常包含大量的数据和细节,因此需要高效的压缩算法来保存这些信息。
- 笔者刚好是在做遥感方面的项目接触到了JPEG_LS算法,遥感图像数据通常具有大容量和高分辨率的特点,因此需要快速的编码和解码算法来处理这些数据。JPEG-LS算法具有较快的编码和解码速度,能够在实时或近实时的场景下对遥感图像进行高效处理。
局限性
- 对于包含大量高频细节的图像,其压缩效果可能不如有损压缩算法。此外,JPEG-LS并不支持透明度和动画等高级图像特性。
算法详解
整体算法思想
算法参数分析
- 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
算法步骤分析
一、建模
二、预测
-
对当前像素进行预测
- 上图xMED为Px,就是预测值
- 上图xMED为Px,就是预测值
-
预测值进行修正
- 利用Q的符号sign和残差修正值C[Q]和参数maxval对Px进行预测值修正。修正公式为
- 利用Q的符号sign和残差修正值C[Q]和参数maxval对Px进行预测值修正。修正公式为
-
残差计算
- 由于笔者所接触的项目是无损压缩,因此,后续工作仅仅对errval进行编码即可,若是近无损则还需要量化模减。但在进行最后的编码之前还需要对上下文参数进行更新
- 由于笔者所接触的项目是无损压缩,因此,后续工作仅仅对errval进行编码即可,若是近无损则还需要量化模减。但在进行最后的编码之前还需要对上下文参数进行更新
-
上下文参数更新
- 这个更新操作每一个像素点编完后都需要进行更新。
- 这个更新操作每一个像素点编完后都需要进行更新。
三、编码
-
编码转换
- Golomb编码由于只能编码非负数所以需要使用Golomb-Rice进行编码。首先需要进行如下映射
- Golomb编码由于只能编码非负数所以需要使用Golomb-Rice进行编码。首先需要进行如下映射
-
Golomb-Rice编码规则
- 先确定k,k是由A数组对应数据计算的。计算k的目的是使得编码后的平均码长最短。对于k的确定我们遵循以下逻辑。
- 对于一个数N,采用这种编码则具备以下格式特征用一个二元码和一个二进制编码中间间隔1即可。
- 所谓二元码就是是多少就用多少个0来表示
参考文献
[1] 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.
注:
- 本文更多从算法实现的角度解析算法,具体论证
- 文章中的图片均来自参考文献,博主无版权,任何转载请注明相关论文