关键词:
JPEG编解码
熵编码
多线程
缓存优化
内存优化
摘要:
JPEG(Joint Photographic Experts Group)是目前图像压缩领域最流行的算法,被数十亿用户广泛使用。然而,在面对需要大量数据存储和快速传输的应用场景时,其相对较低的压缩率已经成为了一个不容忽视的瓶颈。目前学术界和工业界上有很多JPEG重压缩算法,这些方法普遍存在编解码效率不足和高内存消耗的问题,限制了其在实际应用中的可用性。通过深入分析JPEG格式的特点及其在实际应用中的限制,本文重新设计并实现了JPEG图片二次编解码系统。本文采用高效的算法优化和先进的内存管理技术,显著提高了图片处理速度和数据压缩率,降低了内存占用。本文的主要贡献包括:
(1)优化了熵编码模块和系数预处理模块,引入了高效的ANS(Asymmetric Numeral Systems)编码算法,保持压缩率的同时显著提高编解码效率。合并原框架中的二进制码元,减少编解码次数和条件判断时间。通过选择适当的上下文信息降低了合并后码元的条件熵,减少平均码长。对频繁使用的概率空间进行缓存优化,通过合并概率空间提高整个方案的缓存命中率。实验结果显示,在Kodak、DIV2K、***和***这四个图像基准数据集上,相较于其他编解码系统,提出的JPEG二次编解码方案在保持压缩率的前提下,具有最快的解码速度。
(2)提出了一种编解码器内存优化方案,将图片划分为若干个互相独立的切片,将每个切片作为独立的编解码单元。切片中按行分配内存空间,待编码行与预测行通过滚动数组的方式进行系数更新与交换。实验结果显示,内存优化架构在没有进行图片划分的基础上,降低编码端内存使用49.42%,解码端内存消耗80.86%。并且此架构在压缩率没有明显下降的基础上,对于编解码性能有一定的提升效果。
(3)设计了编解码器并行架构,利用多线程技术对编解码器进行并行加速。通过在编码端引入预扫描模块解决了切片之间字节流数据依赖问题,利用Huffman切换词数据结构记录切片间的码流信息,解决了解码端Huffman编码字节不对齐的问题。实验结果显示,并行化架构在两线程的基础上,编码段平均加速比达到1.72,解码端平均加速比达到了1.85,并且几乎不影响算法压缩率。
本文从熵编码算法,预测算法,缓存优化和并行化技术多个角度优化重压缩效率,重构内存分配架构,解决了编解码端内存消耗问题。实验结果表明,本文提出的二次编解码方案在编解码速度和内存消耗方面有了明显提升,这对内存功耗和实时性要求高的应用来说,具有重要的优势和实际应用价值。