>
首页 » 技术文章 » JPEG2000熵编码模块的FPGA实现

JPEG2000熵编码模块的FPGA实现

作者:蒋科 徐新 孙洪 沈芸 陈李廷   时间:2006-12-04 19:21  来源:电子设计信息网-www.edires.net
摘 要: 依据JPEG2000标准中熵编码模块的基本内容,设计并实现了一种“适合VLSI 实现”的嵌入式位平面编码硬件结构. 通过对算术编码的硬件结构进行相应修改,加入前导零探测模块,达到了一个时钟周期编码一个符号的吞吐率. 用Verilog 语言在RTL 级对熵编码模块进行描述,采用ALTEAR公司的现场可编程门阵列(FPGA)进行仿真验证与综合,结果表明所实现的熵编码模块能够以较小的资源耗费换取编解码时间的有效节约.

关键词: JPEG2000 ; 位平面编码; 算术编码; 图像压缩

引 言

在JPEG2000标准中,图像经过变换、量化后,在一定程度上减少了空域和频域上的冗余度,但是这些数据在统计意义上还存在一定的相关性,为此采用熵编码来消除数据间的统计相关. 较之JPEG标准,JPEG2000在熵编码模块中用自适应算术编码代替了传统的Huffman编码,并且在自适应算术编码前加入了一个位平面编码.

JPEG2000 中的EBCOT(带有优化中断点的独立的嵌入式块编码) 算法是由Taubman总结了前人的经验提出来的,该算法能实现极好的压缩性能,便于现场可编程门阵列(FPGA)实现,现已被JPEG2000标准采用,成为其中的核心算法. 而初期的算术编码算法被认为需要无限精度的浮点运算而一直无法得到实用,直到Written等人给出一个通用算术编码器才将算术编码的研究带入高潮. 当前,国内外JPEG2000硬核实现的研究热点主要集中在以下两点: ①将一些上下文在开始时假设为高度偏移的初始状态代替原算法中的等概率模型初始状态以增强压缩效率. ②用低复杂度的MQ编码器代替典型算术编码器,避免乘除法运算. 而这两点正是JPEG2000相对于EBCOT和算术编码的原始算法所做出的相应程度的简化.

本文在简化算法的基础上,从整体上考虑压缩速度和面积因素,提出了一种适合VLSI实现的EBCOT的硬件结构方案. 在已有的自适应算术编码器的硬件结构上加入改进模块,使之能够实现一个时钟周期编码一个符号的吞吐率. 用Verilog语言在RTL 级对整个熵编码模块进行描述,并给出相应的仿真综合结果.

1  嵌入式位平面编码的FPGA 实现

1.1  嵌入式位平面编码
EBCOT是将量化后的子带划分成小的编码块,且认为不同编码块之间相互独立,然后以编码块为单元,进行位平面编码. 这样做是为了使码流达到更好的嵌入式特性. 在编码块的位平面编码扫描中,分为3种扫描方式,一个位平面层的一个采样点,只能存在于3个扫描方式中的一种. 这3种扫描方式分别为重要性延伸扫描,幅度细化扫描以及清除扫描. 每个位平面上的点,如果碰到该点第一个不为“0”的位平面,则该点变为具有“重要性”的点. 位平面编码扫描的所有关系都是建立在点是否具有“重要性”的基础之上.

图1是通道扫描的示意图,对于整个图像,是分成一个一个的小块进行编码的. 图中浅色阴影框中的点表示同一个编码块中的数据,深色阴影框表示扫描窗,而最上和最下面一行的点,则是在另外编码块中的数据. 具体各点属于哪一个编码通道,是由该点周围的8个邻域和该点的值决定的.



1.2  硬件实现总体框图
EBCOT模块包含了5个寄存器组,分别暂存处理点的幅度值;符号、点是否具有“重要性”;点是否扫描过;点是否是第一次在幅度细化中处理. 而且还包含了两个内存模块,分别接收外部模块提供的位平面数据,一个保存处理点幅度,另一个保存处理点符号. 总体框图如图2所示.

图2  EBCOT编码总体框图

1.3  编码点选择
除了第一次位平面扫描外,对于其他任何一个位平面,需要重复扫描3次才可以处理完,而且对于位平面上的任一点,虽然每一次都被扫描,但也不一定是处于该扫描通道中. 可见,如果采用串行的方式,3种通道扫描按顺序运行,所耗用的时间将是3T(T是每次通道扫描所用的时间) ,这是非常耗时的.本文采用的方法是贪婪搜索的方法,即尽可能地搜索在一个位平面中可能被处理的点,如果该点不是可处理的点,就按扫描顺序搜索下一个点,一直要搜索到一个可处理的点后,才进行处理. 考虑到安排的时间周期,以及位平面编码扫描的顺序,最后把搜索的范围定义为4点,即在一个扫描条的范围内.在最坏的情况下,4个点都需要处理,需要4个周期才能处理完,而最好的情况下,4个点都不需要处理,那么也需要花费1个周期.由于要在一个周期内同时处理和并行判断4个点的背景情况,因此需要增加3 个处理单元,4个处理单元同时工作,最后输入到一个中心判决单元进行处理,选择应该处理的点,如图3所示.

图3  处理点选择模块框图

图中4 个单元输出结果的优先级是不同的,按照位平面编码的扫描顺序,应该是从上至下的扫描,单元1 对应较上的点,其结果有最高的优先级,而单元4对应较下的点,其结果的优先级最低,当第一点在当前的编码扫描中,就应该被最先处理. 每一个单元都有一个使能端,一个4点的条状带开始编码时,使能端置“1”,表示每个单元都进行判断;当其中某个单元判断后,该使能端就置“0”,则该单元在本次4点的条状带扫描中就不再进行处理了,这样,这个单元的处理结果就不会影响后面单元处理的结果.

图4  右边边界处理

1.4  边界处理
位平面编码对于符号寄存器组和重要性寄存器组需要扫描到边界以外的数据. 为了使块和块之间数据没有联系,当遇到边界外数据时,需要将这些数据置为“0”值. 而寄存器组模块采用的是寄存器滑动模式,如果在寄存器组中插入边界之外的数据,则相当于插入了冗余数据. 本文采用的方法是设置屏蔽位的方法来置位,即当所处理的点在编码块的第一列或者是最后一列的时候,就相应地设置屏蔽位.如图4 和图5 所示,当处理到编码块一行的最后一列时,此时在寄存器组中, Ra左边的寄存器是Rc,但正确的数据应该是Rb,因此设置屏蔽位,使得寄存器Ra置“0”;当处理到编码块一行的第一列Rc时,此时Rc右边的寄存器是Ra,但正确的数据应该是Rd, 因此设置屏蔽位, 使得寄存器Ra置“0”. 经过这样的处理,就可以完成边界点的处理,同时不会增加存储空间和延时. 在图4和图5 寄存器组中的Rx都是代表其他有效数据.

图5  左边边界处理

2  MQ算术编码器的FPGA实现

2.1  自适应算术编码
初期的算术编码算法被认为需要无限精度的浮点运算. 通用算术编码器以自适应模型为基础,用区间归一化方法解决了原始算术编码算法需要无限精度浮点运算的问题. 将算术编码的研究带入高潮. 但对于图像压缩的硬件实现,编解码时间耗费是相当大的. 结合图像本身特性,JPEG2000采用了基于上下文(CX)的MQ编码器. 上下文就是指被编码比特周围的数据. 图像相邻像素之间,比特平面的相邻比特之间具有较强相关性. 使用上下文可以对符号概率进行较好预测.MQ编码器不是将概率区间直接赋给输入符号0或1 ,而是赋给大概率符号MPS和小概率符号LPS. 设概率区间为A, 输出码流为C,LPS的概率估值为Qe ,则在保证0.75≤A<1.5 时,区间细分可近似为以下两式:
MPS子区间=A-Qe
    LPS子区间=Qe

当概率区间A 小于0.75时,算术编码器采取归一化方法,对A和C同时加倍. 在归一化过程中,有可能导致MPS概率小于LPS 概率,编码器将相应做出交换MPS和LPS的调整.

图6 给出MQ编码器的接口框图,其中待编码数据D按比特输入,它和上下文CX由前述EBCOT编码器成对给出. EnOut 为编码输出的数据.

图6  MQ 编码器接口框图

JPEG2000中给出的概率估值表基本结构如表1 所示,其中Qe是以16进制表示的概率估值. 上下文标号CX按照表中的Index索引值查找相应的Qe. 下一编码状态对应的MPS和LPS值分别由NMPS和NLPS给出. MPS和LPS是否需要转换也由此表中的SWITCH值给出.
表1  概率估值表


2.2  MQ算术编码器硬件实现总体框图
在MQ算术编码器模块的硬件实现上,本文采用的编解码核心结构与Keng-khai Ong等人提出的结构相类似,可达到一个时钟周期编码一个比特的吞吐量. 编码硬件结构如图7所示.

图7  MQ编码硬件结构

该结构主要包含3个寄存器组: 区间寄存器AR ,编码码字寄存器CR ,和比特计数器RT. 区间寄存器和码寄存器同时被处理,区间寄存器的前导零被并行检测,前导零计数被用于区间标准化. 区间标准化后,EnOut被作为结果从码寄存器中输出. 概率估值有限状态机FSM的状态转换和MPS的极性转换也在一个时钟周期完成.

2.3  编码符号选择
硬件编程语言的编码风格要求在描述结构时,一个寄存器变量只能在一个always语句中赋值. 而MQ编码器中初始编码1或0,编码大概率符号或小概率符号,这些条件判决决定着每一个寄存器的调整方式. 如图8 所示,为了避免在每个alway 块中都涉及重复的条件判决,造成综合时的资源浪费,要将条件判决模块提取出来形成编码符号选择信号,作为每个寄存器调整always块的电平敏感信号.

图8  编码符号选择

2.4  前导零检测
MQ编码器用比特填充技术解决进位溢出的问题. 其主要思想是截断从码寄存器CR中输出的连续的1 ,编码器要检测输出码字中具有连续1 的情况,并在合适的地方加入填充比特. 在J PEG2000标准中,RENORME过程每循环一次从AR和CR寄存器中移出一个比特,比特计数器RT相应递减. 当RT 减至0时,BYTEOUT过程就输出一个字节的编码结果,这其中就包括处理进位溢出的比特填充技术. 循环次数不确定导致编码时钟周期的不确定,不但不可综合,也是限制吞吐率的关键所在. 为提高吞吐率,引入前导零检测技术一次性获得所需循环次数,在后续模块中结合条件判决在适当时刻进行比特填充. 硬件设计的伪码描述如下.
if ( ( AR| 16′h7FFF) = = 16′hFFFF)
  Count = 0 ;
else if ( ( AR| 16′hBFFF) = = 16′hFFFF)
  Count = 1 ;
   .
else if ( ( AR| 16′hFFFE) = = 16′hFFFF)
  Count = 15 ;
else  Count = 16 ;
if (Count < RT)
begin
  Buffer = RT - Count ;
end
else
begin
Temp = Count - RT ;
   .
  begin
    Buffer = Temp - 7 ;
  end
   .
end

前导零探测是组合逻辑,完全可以在一个时钟周期内完成. 相应的循环次数已经确定,可以保证达到一个时钟周期编码一个比特的吞吐量.

3  结果与分析

本文对所实现的熵编码模块进行了仿真验证与综合,仿真使用的EDA 软件是Modlesim ,综合使用的EDA软件是synplify. 以JPEG2000熵编码器标准测试码流作为输入测试,这里以16进制表示,共32个字节. 输入熵编码器时逐个比特输入.输入测试码流:
00 02 00 51 00 00 00 C0 03 52 87
2A AA AA AA AA 82 C0 20 00 FC
D7 9E F6 BF 7F ED 90 4F 46 A3 BF
得到结果码流为:
84 C7 3B FC E1 A1 43 04 02 20 00
00 41 0D BB 86 F4 31 7F FF 88 FF
37 47 1A DB 6A DF FF AC
图9 为熵编码模块的Modlesim前仿真截图,图中D是按比特输入的测试码流,EnOut为结果码流的16进制表示,由图可见编码器能够实现每个时钟周期编码一个符号的吞吐量,仿真结果与测试码流应输出结果相符.

图9  熵编码器Modlesim前仿真截图

本文尝试将所实现模块分别综合到Altera公司的FLEX10 K10023和St ratix系列的EP1S10 FPGA上,得到参数如表2所示.


国外成型产品AMPHION CS6510 JPEG2000编码器的最高时钟频率可以达到42.5MHz. 由表2可以看出,在同类器件中,本文实现的熵编码模块可以得到更高的时钟频率.

4  结 论

本文提出了一种适合VLSI实现的JPEG2000熵编码模块的硬件结构,在此基础上进行了相关仿真和综合验证,在时钟频率和编码吞吐率上取得了良好的实验效果. 通过与国外成型产品的比较,可以看出作者所实现的熵编码模块在性能上可以适用于完整的JPEG2000系统设计.


相关推荐

基于Q-Coder算术编码器的IP核设计

Q-Coder  JPEG2000  IP  2009-07-06

图像压缩技术进展

图像获取  图像压缩  WISARD  2009-05-18

嵌入式设备的静止图像编码

静止图像编码  H.264  JPEG2000  2009-02-25

TI IP网络摄像机解决方案

一种基于小波变换的新型压缩编码模型

JPEG2000熵编码模块的FPGA实现

在线研讨会
焦点