JPEG2000 MQ编码算法的优化和FPGA实现

FPGA/ASIC技术

190人已加入

描述

摘要: MQ编码是一种无损数据压缩技术,已被JPEG2000标准采用,其高复杂度成为JPEG2000系统实现的速度瓶颈。本文在分析MQ编码算法软件流程的基础上提出了一种优化的基于流水线处理的MQ编码算法;并利用Xilinx FPGA的可编程特性详细地将此算法模块化,最后实现仿真验证。结果表明,该算法在有限资源消耗情况下最高运算时钟频率可达89.8 MHz,算法对于压缩速度要求严格的JPEG2000实现具有一定实用价值。

JPEG2000是新一代静止图像压缩标准[12],通过多项创新技术的引入,JPEG2000可以提供比JPEG 更优质的压缩效果和更多的新功能。MQ算术编码器是一种基于上下文的自适应二进制算术编码器,作为JPEG2000 的关键技术之一,具有比传统 Huffman 编码好的压缩性能,但频繁的重归一化和串行处理也使得软件实现JPEG2000效率很低。随着高性能的FPGA发展和大分辨的图像压缩需求不断增加,JPEG2000高速硬件处理已成必然。

为了满足MQ编码的高速处理,专家们对MQ编码硬件实现进行了研究,提出了一些有效方案[2,3,5]。本文对标准的MQ算法进行梳理,在MQ编码的反馈和循环、区间更新条件判断方面提出优化,并对MQ编码进行模块化划分,详细实现了一种基于流水线处理的MQ编码FPGA架构。

1 MQ编码原理及FPGA实现

MQ编码属于JPEG2000中的Tierl编码,原始图像小波变换后的数据经量化后以码块为单位,首先根据数据位宽被划分为一系列的位平面,通过位平面编码的通道扫描生成上下文;然后MQ编码器将上下文CX与原始数据D编码生成压缩码流CD。图1是MQ编码输入/输出数据图。

编码

图1 MQ编码输入/输出数据图

MQ编码器工作流程为:首先根据上下文CX查找上下文状态表(I表),找出当前概率索引值 I(CX)以及大概率符号MPS。接着,根据当前概率索引值I(CX),查找概率估值表,得到Qe、NMPS、NLPS和SWITCH值。然后根据当前区间的概率间隔A、编码字符串C、原始数据D以及Qe综合判断,比较进行A、C和I的更新。为使A始终保持在0.75~1.5,当A<0.75 时,采用重归一化策略,即A、C同时左移加倍,以保证概率间隔足够大。最后,为防止重归一化造成C溢出,C的最高位字节将被定期移到外部缓存中,并输出即形成压缩码流CD。

本文对编码过程进行模块化流水线设计,包括:概率估计模块,编码区间更新模块,重归一化模块及字节输出模块。

1.1 概率估计模块设计
在概率估计模块,主要完成的是对CX的概率估计QE,根据当前区间的概率间隔A、编码字符串C以及Qe,综合判断原始数据D是属于大概率区间MPS,还是小概率区间LPS。概率估计模型是具有47个状态的有限状态机[4],每个上下文CX对应于其中某个状态。在FPGA中这47个状态可通过查找表实现,如表1所列。

表1 改进后的概率估计表

编码

 

查找表的输入Index为概率索引值 I(CX),查找表输出分别为Qe、NMPS、NLPS和SWITCH值。如上文提到当A<0.75(0x8000)时,需要进行区间更新。JPEG2000标准中,区间重整采用循环判断方式,每次判断然后一位位移位操作。这里可以采用前导零的方法提前检测概率间隔A的前两位有多少个零,进而一次性移位,减少移位周期。因此在查找表中增加了一项Bit_Shift输出。

1.2 编码区间更新设计
编码区间更新根据更新前的A和C以及当前的QE综合判断。JPEG2000标准中,判断条件较为复杂,进行优化后如图2所示。

编码

图2 改进的区间更新流程

其中,ShiftA为A左移Nbshift位后的结果;ShiftC为C左移Nbshift位后的结果;Nbshift为一次性具体左移多少位;Bit_Shift为概率估计查找表输出,Bit_ShiftA_QE为A_QE的高16、15位零的个数;C_carry为更新后的C的最高位字节。对于Nbshift可以理解为:A选择为QE时,即需要移位QE的高bit位含零个数;A选择为A_QE时即需要移位A_QE的高bit位含零个数。

在进行编码区间更新的同时,需要判断原始数据D是大概率还是小概率,进而更新概率索引值I(CX)。对JPEG2000标准中的此处判断条件进行优化,如图3所示。这里NMPS、NLPS和SWITCH为概率估计表输出,6bit位宽的I_reg和1bit位宽的MPS_reg合并即为更新后的I(CX),具体I(CX)结构可见参考文献[1]。

编码

 

图3 改进的区间更新流程

1.3 重归一化及字节输出设计
字节输出实际上是对C_carry在一定条件下的输出,即当C_carry凑够整字节时输出为CD(或B)。JPEG2000标准中字节输出流程是串行执行的,效率较低。为了充分利用硬件并行执行的优势,我们对流程进行了一些调整及优化,以加速字节输出的实现。调整后的流程如图 4所示。

编码

图4 调整后字节输出流程

这里设置一个专用计数器CT 来进行字节输出的控制, 当重归一化发生时,概率间隔寄存器 A 每左移Nbshift位,CT 加Nbshift,当 CT ≥20 时,MQ 算术编码器输出一个字节。字节输出的过程中,若字节缓存 B 中值为 0xFF,则需进行比特填充,以防止进位的传播影响已编码字节。当需字节输出时,根据字节缓冲 B中字节及寄存器 C最高位C_carry的值,进行相应的字节输出操作。由于C_carry由Nbshift移位得到,而Nbshift最大值为15,也就是说C_carry可能输出1或2个字节。

2 仿真结果及分析

按照上述系统,选用Xilinx公司的FPGA芯片xc7z020-2clg484,分别实现各个模块并编程在ISE运行,处理速度达到89.8 MHz。由于该编码器的工作效率为每个时钟可编码1位,该编码器的工作速度可以达到89.8Mb/s,远优于软件实现的MQ编码。相比参考文献[6]~[8]较大地提高了编码效率,对比结果如表2所列。

表2 多种实现方式的时序结果比较

编码

 

方案占用的FPGA资源情况如表3所列,资源占用情况和参考文献[6]~[8]基本相同。

表3 FPGA资源使用情况

编码

图5为FPGA实现后的Modelsim仿真所得的数据。由图5可知,本文提及到的一些寄存器初始值情况,还可以看出CT等于20时已经满足压缩字节输出条件,输出B(仿真图中的data_ram_wdata)为0x17。

编码

图5 FPGA 实现后环路锁定相位抖动

结语
本文介绍了MQ编码流程,详细对其中几个流程进行了相应的算法优化并使用FPGA实现MQ编码。

结果显示优化的MQ编码在利用有限资源的情况下可以较大幅度提高MQ编码器的速度,能满足JPEG2000系统的要求。本论文中所采取的优化设计已经在FPGA硬件平台验证通过,并在航拍大分辨率图像处理的JPEG2000压缩中得到应用。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分