JPEG编码器
JPEG编码器(精选5篇)
JPEG编码器 第1篇
本文介绍在FPGA电路平台上一种高效的位平面、过程并行的位平面编码器电路设计。首先简要介绍位平面、过程并行的位平面编码算法和局部并行电路结构。然后给出具体的电路设计, 最后给出实验结果和总结。
一、位平面、过程并行的位平面编码器
位平面编码是将小波系数从幅度的高位平面向低位平面渐进编码。每个位平面编码又分为3个编码过程:重要性传播过程 (significance propagation pass, SP) 、幅度细化过程 (magnitude refinement pass, MP) 和清除过程 (cleanup pass, CP) 。这3个过程按照SP, MP, CP顺序进行, 系数的重要性状态随着编码的进行而变化。各编码过程的具体编码工作由4个编码模块执行, 分别是零编码模块 (zero coding, ZC) 、符号编码模块 (sign coding, SC) 、幅度细化模块 (magnitude refinementprimitive, MRC) 和行程编码模块 (run length coding, RLC) 。SP过程使用ZC模块和SC模块执行编码;MP过程使用MRC模块执行编码;CP过程使用RLC模块、ZC模块和SC模块联合执行编码。
在Tsai[5]的编码结构中, 程序编码电路需等待程序预估电路完成建立预估表后才开始编码动作, 这样程序编码电路会有一段时间无动作, 因此我们设计了并行编码结构电路, 将程序预估电路和程序编码电路以并行方式进行各自的动作, 可以减少建立预估表所耗的时间, 图1给出了总体结构概念图。数据存储器中的小波系数, 经过编码信息产生器和程序预估处理器后送到编码信息寄存器中, 控制器控制移位寄存器将合适的数据送到数据线上, 每个位平面的编码模块从数据线上读取输入信号, 输出相应的上下文和数据对, 算术编码器利用这些上下文和数据对进行后续编码。
二、并行结构的位平面编码器的实现
我们所设计的位平面编码硬件电路结构图如图二所示, 包含 (A) 地址产生模块、 (B) 存储器模块、 (C) 移位寄存器模块、 (D) 更新和预估模块、 (E) 编码信息产生器、 (F) 编码信息寄存器模块、 (G) 控制电路模块、 (H) 程序编码处理模块。具体介绍如下:
A、地址产生模块:包含两种电路:存储器地址产生电路、位平面计数器电路, 存储器地址产生电路用于产生读写内部或外部存储器地址, 包含外部存储器、存储器、寄存器地址产生器, 而位平面计数器电路用于对预测电路和编码电路所处理的位平面进行计数。
B、存储器模块:包含编码块、符号、重要状态、预估和数值增量存储器。
C、移位寄存器模块:包含编码块、符号、重要状态、预估和数值增量移位寄存器。
D、更新和预估模块:包含重要状态更新模块、数值增量更新模块和程序预估模块, 重要状态更新模块从编码块移位寄存器和重要状态移位寄存器读取资料, 用来判断目前行是否有新的重要状态出现;数值增量更新模块读取数值增量移位寄存器和重要状态更新模块所送出的sig_update_en信号, 来判断是否要更新数值增量移位寄存器模块, 程序预估模块读取重要状态更新模块所送出sig_update_en信号和预估移位寄存器中所有寄存器资料, 来预估目前行的程序状态并更新预估移位寄存器。
E、编码信息产生器模块:为了让程序预估电路与程序编码电路并行动作且互不干扰, 因此加入此模块读取程序预估移位寄存器和各移位寄存器的资料, 来产生目前行的4个预编码位元的编码信息。
F、编码信息寄存器模块:在编码信息产生器电路中, 一次针对一行产生4组编码信息, 并写入编码信息寄存器, 且程序电路在一个周期内由编码信息产生器读出一行的编码信息进行编码。
G、控制电路模块:包含控制单元和编码处理器, 以有限状态机设计方式来产生控制信号, 控制电路中存储器读写、预估电路和编码电路的动作, 控制单元和编码处理器功能分述如下:
a、控制单元:电路开始于一个新的编码块, 需先从外部数据存储器中载入编码块数据到编码块数据存储器和符号存储器。由控制单元送出控制信号到位置产生器 (Address Generator) 产生读取和写入的位置, 完成数据存储器载入之后, 开始电路的编码动作。从最重要位平面开始, 控制单元送出控制信号使能程序预估电路和编码信息产生电路, 并由编码块、符号、重要状态等存储器读出行资料, 产生程序预估和编码信息。完成一行之后再继续处理下一行, 并送出控制信号将更新模块、预估模块和编码信息产生器电路产生的数据写入符号存储器、预估存储器、数值增量存储器和编码信息寄存器中, 直到完成一个位平面的处理。接着判断目前位平面是否是最不重要位平面, 如果是的话, 就完成编码块的编码, 否则从下一位平面开始编码。
b、编码处理器:用来控制程序编码处理电路和编码信息寄存器的读取, 当开始一个编码块的编码时, 编码处理器送出控制信号到编码信息寄存器中, 一次读出4组编码数据, 并先判断这4组编码数据的rlc状态。若rlc状态皆为“01”, 代表这4个编码位由程序3的Run-Length Coding编码, 便送出pass_select信号为“001”至程序编码处理电路中, 否则代表4个编码位是由不同程序所编码, 将一次送出一位pass_select信号。而psaa_select信号时每组编码信息中的程序状态, 当完成一个位平面, 接着判断目前位平面是否为最不重要位平面, 如果是, 即完成编码块的编码, 否则从下一位平面所对应到的寄存器读取编码数据, 继续下一个位平面的编码。
H、程序编码处理模块:包含4中编码电路, 分别为零编码模块 (zero coding, ZC) 、符号编码模块 (sign coding, SC) 、幅度细化模块 (magnitude refinementprimitive, MRC) 和行程编码模块 (run length coding, RLC) , 由编码处理器从编码信息寄存器中读出编码数据送到各编码电路中, 并由编码处理器送出的pass_select信号来选择由哪一编码电路输出, 如图3所示。
三、试验结果及结论
针对本文提出的位平面编码器结构, 我们以Verilog-HDL语言描述硬件电路, 并以Altera QuartusⅡ7.0软件进行硬件仿真及验证, 电路效率如图4所示。
经过硬件电路的实现和验证, 在并行程序预估部分对于nxn的编码块只需n个周期即可完成程序预估, 并可减少编码判断的周期, 且程序编码在每个周期都会产生Context (CX) 和Decision (D) , 使电路没有闲置时间, 加快编码速度, 与现今已提出的编码结构相比, 可节省3倍编码时间以达到快速编码的需求。
摘要:在JPEG2000编码系统中, EBCOT tire-1的位平面编码器的复杂编码运算是整个系统的瓶颈, 为了加快位平面编码器运算的速度, 我们提出并行VLSI架构, 用来处理编码器中的并行程序预估和程序编码。我们以VerilogHDL编写硬件代码, 并以Altera QuartusⅡ进行模拟硬件仿真。
关键词:JPEG2000,位平面编码,并行,FPGA
参考文献
[1]JPEG2000Part1020719 (Final Publication Draft) .ISO/IECJTC1/SC29/WGI N2678, 2002-07
[2]Xu Chao, Han Yanju, Zhang Yizhen.Bit-plane and Pass Dual Parallel Architecture for Coefficient Bit Modeling in JPEG2000.IEEE Int.Conf.on Acoustics, Speech and Signal Processing (ICASSP2004) , Montreal, Canada, 200-05
[3]Andra K, Charkrabarti C, Acharya T.A High-performance JPEG2000Architechture.IEEE Trans.Circuits Syst.Video Technol., 2003-03:209-218
[4]Lian C J, Chen K F, Chen H H, et al.Analysis and Architecture Design of Block-coding Engine for EBCOT in JPEG2000.IEEE Trans.Circuits Syst.VideoTechnol., 2003-05:219-230
JPEG编码器 第2篇
JPEG 2000是为了弥补JPEG的不足而提出的新一代静止图像压缩国际标准[1]。其目标是对多种类型的静止图像实现高效压缩, 并要求压缩码流具有较好的抗误码性能, 用户可对图像进行多种形式的累进传输, 还可以对压缩码流进行随机访问和处理。
JPEG 2000用基于上下文的自适应算术编码取代JPEG系统中的赫夫曼编码, 对量化后小波变换系数的二进制位平面进行算术编码[2]。算术编码对每一小波子带分块独立进行位平面编码, 并将每个位平面分在3个子位平面通道内进行编码[3]。虽然现有算术编码在算法上做了很多改进, 但算法的复杂性和大量的编码数据导致MQ编码器的实际工作效率仍然很低。为了提高MQ编码器的编码速度, 对编码流程进行优化, 提出一种基于三级流水线的MQ编码器的VLSI结构。
1MQ编码器原理
JPEG 2000的编码系统流程[2]如图1所示。
在JPEG中, 作为无损压缩DCT系数的熵编码方法, 采用了霍夫曼编码[5] (算术编码为选项) 。霍夫曼编码因按DCT系数大小来分配可变码长, 所以查表处理形成主体, 能够简单实现霍夫曼编码。但是, 由于预先调查了解符号系列的统计性质后制表, 所以此后一旦有与其性质相违背的符号输入进来, 就难免使压缩特性恶化, 这个不足限制了其应用范围[6]。
补救霍夫曼编码这一缺点的就是JPEG 2000中被采用的自适应算术编码。算术编码的构思是作为Elias编码, 依据为人们所熟悉的划分递归概率区间的设想, 在Elias编码中, 对于具有“0”或“1”值的二进制符号系列, 以各自概率值比率将当前概率区间划分成两个子区间, 被分配给实际产生符号的概率值区间下限值构成代码串。即代码串按二进制符号系列的输入逐次被递归地修正下去。
JPEG 2000中采用算术编码, 其基本规则像Elias编码那样, 不是以符号“0”和“1”的实际值来区别, 而是分别作为MPS (大概率符号) 或LPS (小概率符号) 中一个子区间来区别的。而且, 将当前概率区间划分成两个子区间时的顺序是MPS子区间可配置到LPS子区间的上面。因此, 若符号是MPS, 就在给代码串附加LPS子区间的同时, 设概率区间宽度为MPS子区间;若符号是LPS, 就不改变代码串, 设概率区间宽度为LPS子区间。按判决输入将此处理递归地重复下去。
MQ编码器的输入/输出框图[7]如图2所示。其中, D是二进制判决;CX是上下文索引;D和CX二者均事先由算术编码之前进行的系数位建模确定。CD是输出的压缩数据。
在MQ算术编码器中, 用寄存器A表示当前子区间的宽度, 寄存器C表示子区间的起始位置。它们均具有16 b有效长度, 在发生重新归一化时, 为了避免16 b的C寄存器溢出, 而采用28 b表示。通过采用重新归一化方案, 使A的取值范围保持在[0.75, 1.5]。 当编码器接收到一个新的待压缩码, 编码器从概率估值表查找相应的概率Qe。根据接受的待压缩码类型, 寄存器A的值和寄存器C的值被进行更新, 从而区间更新可近似为:当编码MPS时, A=A-Qe, C=C+Qe;当编码LPS时, A=Qe, C=C, 避免了乘法运算[8]。
同时, 由于MQ算法在进行区间计算时省略了乘法的近似, 使得可能发生LPS子区间大于MPS子区间的情况。为了避免这种情况, 采用区间条件交换, 即将MPS与LPS互换。MQ编码器通过重归一化方法解决计算的有限精度问题[9]:当A<0.75时, 对A进行左移直至不小于0.75为止, 同时C也左移同样位数, 并按一定间隔将不再变化的高位移入存储区。
MQ编码器所使用的概率估值表是一个可以对原始数据快速适应的复杂概率自动估计模型。该模型是一个具有47个状态的有限状态机。每个状态包含小概率符号LPS的概率Qe、下一个状态的索引NMPS和NLPS, 是否需要交换MPS和LPS所代表符号的标志SWITCH。
MQ编码器中设置了一个专用计数器CT作为已压缩字节输出控制。当A左移1位时, CT也同时减1;当CT=0时, 输出1个字节。为避免区间更新过程中产生的进位向前传播, 在MQ编码器中, 采用位填充技术来处理进位问题。根据字节缓冲B及C进位位的值, 编码器选择是否进行位填充。
2MQ编码器的优化
MQ编码器采用串行执行方式, 且编码算法复杂、耗时, 从而导致编码器执行速度慢, 效率低下。为了提高MQ编码器的运行速度, 利用FPGA的大容量和并发执行等特性, 对MQ编码器进行设计, 在不改变原算法理论的条件下, 对整个流程进行改进和优化。
只有当前一输入的结果被输出后才能读入下一输入的串行执行方式, 极大地限制了编码速度的提高。为解决这个问题, 将整个编码流程分成三个大的模块 (如图3所示) 串接起来, 采用流水线的方式进行工作。
其中, GLGJ模块为概率估计模块, 其功能是根据上下文索引CX选择, 判决D编码所必需的概率估值和相关数值, 在各个上下文自适应更新数值;PJENCODER模块为判决编码模块, 其功能主要是进行MPS编码或LPS编码、重新归一化等主要数据处理进程;ENCODER模块为编码输出模块, 主要完成压缩数据的输出及编码终结等功能;由这三个模块组成三级流水线。
2.1 判决编码的化简
判决编码中先判断D的取值是“0”还是“1”, 如果D=0, 就进行0的编码;如果D=1, 那就进行1的编码。在“0”或“1”的编码中, 又要根据MPS (CX) 的取值, 判断是进行MPS编码, 还是进行LPS编码;在MPS和LPS编码中, 先更新区间宽度A的值, 即A=A-Qe[I (CX) ], 再判断A是大于还是小于Qe[I (CX) ], 由此与其他的一些条件决定最后的赋值方式。
上述过程包括ENCODE, CODE0/CODE1, CODELPS/CODEMPS五个子流程, 6个条件判断, 多次赋值, 降低了编码速度。对编码的判决条件进行整理, 减少不必要的赋值, 其Verilog代码如下:
由此可有效地减少不必要的寄存器和位数赋值, 加快模块的工作效率, 从而提高整个系统的工作频率。
2.2 重新归一化的加速
MQ编码器一方面在编码MPS时, 给代码C加上Qe值, 将概率区间A减为A-Qe;另一方面, 在编码LPS时, 代码C不变, 将概率区间A置换成Qe。如果将这样的区间划分运算进行下去, 在某一时间点上, 概率区间A就会比必要精度范围 (0.75A<1.5) 小, 这时就要通过重新归一化A与C维持精度范围。
重新归一化过程是根据条件 (A<0.75) :当条件成立时, 将区间寄存器A和代码寄存器C再左移1次, 使其大小加倍, 直到概率区间A的大小超过0.75。由此可见, 如果A的值很小, 则左移操作将会反复进行, 大大降低了编码速率。同时因编码中有MPS编码和LPS编码两种, 根据D的不同以及编码方式的不同, 重新归一化时移位的次数也不同。
因此为了提高速度, 并充分利用硬件的优势, 将Qe的移位次数作为寄存器数, 加入到概率估计表中 (表1所示) 。无论输入数据D为何值, 编码的判决都是以LPS或MPS为标准, 所以当判决为LPS编码时, LZEROS中的数据就决定了左移位的次数;当判决为MPS编码时, MZEROS中的数据就决定了左移位的次数。通过编程将扩展后的概率估计表, 以寄存器的方式固化在芯片内部[10], 虽然这样增加了硬件电路中寄存器的数量, 但可以通过一次性的直接查表得到判决编码和重归一化所需的数据, 提高了查找效率。由于每次编码都要用到该表, 访问效率很高, 这样大大加快了编码的速率, 同时便于流水线结构的实现。
2.3 编码输出模块的改进
标准MQ编码器中当输出计数器CT=0时, MQ编码器输出1个字节。标准中字节输出流程是串行执行的, 造成效率低下。又由于重新归一化过程采用了一次性的移位方式, 最大的移位次数可达15次, 且过程中伴随着字节输出。有三种可能情况:不需要进行字节输出, 需要进行1个字节或2个字节的字节输出。因此需要对字节输出机制作改进。这里将减法记数器CT改为5位的加法记数器, 并使用一个16位的数据缓存器。根据CT的取值, 判别输出的是0字节还是1字节或者2字节, 由此达到加速字节输出的目的。
3实验结果及分析
对所实现的MQ编码模块用Verilog HDL硬件描述语言进行RTL级描述, 在Xilinx ISE 7.1和Modelsim 6.1平台下进行功能验证和时序仿真。按字节输入测试码流: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。得到的结果与理论结果一致, 仿真波形如图4所示。
图4中D为输入的测试码流, CDH为输出码流。该设计在Xilinx的XA2C32A-6VP44器件上进行验证, 结果表明, 最高工作频率可达95.47 MHz, 较大地提高了编码速度, 能够满足JPEG 2000对高速编码的要求。
4结语
综上所述, 为了满足现在对JPEG 2000高速编码的需求。在对MQ编码器的流程及相关算法进行分析后, 利用现有FPGA的优势, 在采用三级流水线结构的同时, 对编码进行了优化;经Xilinx的FPGA器件实现, 不仅验证了该设计在功能上的正确性, 同时表明在编码速度上得到了很大的提高, 且最高工作频率可达95.47 MHz。
摘要:MQ编码器是JPEG 2000标准中重要的无损压缩算法, 可获得很高的压缩效率。但因其算法复杂度高, 执行速度慢, 使其应用受到很大限制。为了获得高速处理能力, 设计一种高速MQ编码器的VLSI结构, 采用三级流水线结构, 对算法进行优化, 并改进概率估计表内容。设计使用Verilog进行编程, 最后通过Modelsim 6.1进行仿真。实验结果表明, 该设计极大地提高了编码速度。这里的研究对于JPEG 2000在实际中的应用有着重要的意义。
关键词:JPEG2000,MQ编码器,VLSI,算术编码
参考文献
[1]Taubman David S, Marcellim Michael W.JPEG 2000图像压缩基础、标准和实践[M].魏江力, 柏正尧, 译.北京:电子工业出版社, 2005.
[2]Pennebaker W B, Mitchell J L, Langdon G G, et al.An Over-view of the Basic Principles of the Q-Coder Adaptive BinaryArithmetic Coder[J].IBM Res.Develop., 1988, 32 (6) :717-726.
[3]陈美丽、黄士坦.JPEG 2000中的EBCOT并行处理方法研究[J].计算机技术与发展, 2006 (6) :104-106.
[4][日]小野定康, 铃木纯司.JPEG 2000技术[M].强增福, 译.北京:科学出版社, 2004.
[5]Fang Chanchan, Ye Bing, Wu Biao.Design and Implementa-tion of the Parallel Huffman Decoder[J].Journal of HefeiUniversity of Technology, 2007, 30 (7) .
[6]Brady, Bosse F, Murphy N.Context-based Arithmetic Enco-ding for Compressing 2D Shape Sequences[A].IEEE Inter-national Conference on Image Processing[C].1997, 1 (10) :29-32.
[7]杜伟娜, 孙军.新一代静止图像编码系统JPEG 2000[J].电路与系统学报, 2002 (3) :72-76.
[8]王菊花.JPEG 2000中MQ算术编译码器的研究[J].空间电子技术, 2003 (1) :27-30.
[9]梁宏程, 陈常谦.自适应算术编码及其在JPEG 2000中的应用[J].计算机与数字工程, 2005 (7) :56-59.
[10]宋乾暾, 黄普明, 孙献璞, 等.JPEG 2000中MQ编码器的硬件高速实现[J].空间电子技术, 2005 (4) :25-29.
[11]王超, 曹鹏, 李杰, 等.一种基于提升的二维离散小波变换VLSI架构[J].现代电子技术, 2007, 30 (14) :114-118.
JPEG编码器 第3篇
JPEG2000标准是利用了离散小波变换技术和嵌入式编码技术一EBCOT[1], 它不但提高了压缩比, 而且提供了很多新编码方法。感兴趣区域编码 (ROI) 便是新编码方法之一。ROI编码不仅较好地保持了图像的视觉效果, 而且更大限度地压缩了图像, 这非常有利于解决信道拥挤, 和存储空间过大的问题。
在使用图像过程中, 人们通常只对图像的某一区域关注较多, 我们称之为感兴趣区域, 而对其他区域关注较少, 我们称之为背景区域。于是我们在图像编码过程中, 可以对关注较多的感兴趣区域进行高质量的编码, 而对背景区域较低质量的编码, 从而提高图像压缩比, 这就能更进一步地协调好图像质量与压缩比的矛盾, 这就是ROI编码技术。
1 JPEG2000标准中的两种感兴趣区域编码方法
JPEG2000中给出了两种感兴趣区域编码算法:一般位移法[2]和最大位移法[3]。
1.1 一般位移法
一般位移法就是对于一个位移因子S, 就是背景区域内的系数右移S位, 这样做是使得感兴趣区域的一部分系数比背景区域的系数的位平面要高, 如图1 (c) 。在编码时, 位平面高的会先于位平面低的先编码, 于是感兴趣区域的一部分系数就会先编码和传输, 然后才是剩余一部分感兴趣区域位平面和背景区域位平面一起编码传输。
在一般位移法中, 位移因子的选择范围是非常大的, 可以根据不同的需要来确定S的值。当位移因子较大时, 感兴趣区域位平面和背景区域位平面相对较分离, 编码时几乎是感兴趣区域都编码完了才开始编码背景区域的位平面。当位移因子较小时, 将会有较多的感兴趣区位平面和背景区域位平面一起编码传输。
一般位移法也有它的不足之处, 就是编码时, 需要把感兴趣区域的形状参数一起编码和传输出去, 这就增加了编解码的难度, 而且形状参数的编码也会挤占信道, 也就降低了编码效率。JPEG2000标准中, 只能满足对椭圆和矩形的感兴趣区域编码, 这在一定程度上限制了感兴趣编码的广泛应用。
1.2 最大位移法
最大位移法中, 所有量化系数输入到编码器后, 编码器根据输入的量化系数, 生产一个特定的位移因子S, 次位移因子S可以能使得感兴趣区域位平面和背景区域位平面完全分离开, 没有任何重叠部分, 如图1 (b) 。也就是此时位移因子得满足:S≥max (Mb) , Mb是所有位平面幅度的最大值。
最大位移法中, 不需要对形状信息进行编码, 所以可以节约一些码流。但是由于位移因子S的值是唯一固定的, 所以不能调节感兴趣区域和背景区域的相对图像质量。
2 通用的部分位平面偏移方法
正是由于标准中的两种ROI编码都有一定不足, 于是广大学者对ROI编码进行了很多的研究, 探索出了一下新的编码算法。本文下面就要介绍一种新的感兴趣编码算法:通用的部分位平面偏移方法[4] (Generalized Partial Bitplanes Shift Method, GPBShift) 。
标准方法中是一次完成位平面的移动, 但GPBShift方法是将ROI的位平面系数分割为两段, 将BG的位平面系数也划分为两段, 编码时按照不同的图片质量需要对四个位平面段进行相应的移动。
图2是GPBShift方法的位平面偏移示意图。其中S1=3, 表示ROI系数中被划分较高位平面的个数;S2=6, 是BG系数中被划分较高位平面的个数。在图2中, 位平面的由上到下的序号依次为1, 2, 3, 4, 5, ……。在编码时, GPBShift的位平面偏移方法为:
(1) 对于ROI系数中的某一位平面b:
如果b≤S1, 则不偏移;否则, 下移到位平面b+S1。
(2) 对于BG系数中的某一位平面b:
如果b≤S2, 下移到位平面b+S1;否则, 下移到位平面b+S1+[max (Mb) -S2]。
解码时, 操作刚好与上述位移方法相反。
在运用此方法时, 尽管理论上S1和S2可以自由地取0到max (Mb) 之间的任意整数, 但取值不当, 会影响编码效率和系统的可靠性。例如:当S1>S2, 位平面就出现“空闲”的状态, 如图3所示。这样就扩大了系数的变化范围, 降低了系数的准确性, 而且会影响编码的速度。所以实际应用中要求S1≤S2。GPBShift方法运用JPEG2000的ROI编码, 兼顾了其他改进算法的优点, 其主要优点如下: (1) 对ROI的形状没有要求, 不用进行形状编/解码, 降低了对编/解码的要求, 节约了数据量; (2) 可以对分辨率不同ROI, 运用不同的小波子带; (3) 通过设定不同的S值, 能自由地调节ROI和BG重建图像的相对质量; (4) 多个不同分辨率的ROI可以存在于同一副图像中。
3 结束语
本文在分析JPEG2000标准中两种基本的ROI编码方法的后, 介绍了一种新的ROI编码方法:GPBShift (通用的部分位平面偏移方法) , 该方法思路很容易理解, 且实现较容易, 不会增加编解码器的复杂度, 能够自由地调整ROI和BG区域的相对质量, 同时与JPEG2000标准有良好的兼容性。
摘要:JPEG2000是由联合图像专家组为静态图像编码所制定的一个新的国际标准, 通过感兴趣区域编码算法实现JPEG2000编码的高压缩率。本文通过对JPEG2000标准的ROI编码的两种位移编码算法分析和对比, 引出一种新的ROI编码方法-GPBShift, 并介绍了其编码原理及性能。
关键词:JPEG2000,感兴趣区域,一般位移法,最大位移法,通用的部分位平面偏移
参考文献
[1]Taubman.High performance Saclable Imgae Compression With EBCOT[J].IEEE Transactions on lmage Processnig, Vol9, N0.7, pp.1158一1170, July2000.
[2]ISO/ISC JTC 1/SC 29/WG 1 (ITU-T SG8) JPEG2000 PartⅡFinal Committee Draft Version 1.0[S].Dec, 2000.
[3]ISO/ISC JTC 1/SC 29/WG 1 (ITU-T SG8) JPEG2000 PartⅠFinal Committee Draft Version 1.0[S].Dec, 2000.
JPEG解码器IP核的设计与实现 第4篇
1 JPEG解码IP核设计和实现
在JPEG解码器中,因为Huffman解码是变长的,本次解码结束后才能重新定位码流难以实现流水线设计,所以本设计中主要通过提高功能部件并行度和在功能模块内部实现流水线来提高解码速度。因为解码速度不定,所以各功能模块间的握手信号很关键。每个模块的数据输出时也要考虑到后级模块的数据输入要求,这样才能达到整个解码过程的有序、高效进行。JPEG解码IP核总体架构,如图1所示。
1.1 JPEG解码IP核控制器设计
JPEG解码器控制器的作用是在不同解码环节为各个单元模块分配任务,以控制中间运算过程及最后输出结果。采用了有限状态机的设计方法,这是一种结构清晰、设计灵活的方法,它易于建立、理解和维护,特别是应用于大量状态转移和复杂时序控制系统中更显优势。控制器主要由一个Mealy型有限状态机实现,状态转移如图2所示。
初始化状态(IDLE):复位或者一幅图像解码完成时进入的状态,重新定位码流,在解码开始标志有效时跳转到标志符解码状态(DeMarker)。
标志符解码状态(DeMarker):按JPEG码流语法和JFIF文件格式解析标记符,根据解析出的标志符跳转到相应的标志段解码状态,如果解析到SOI标志符或者是0xFFFF状态不改变。
解码出错状态(False):若是在标志段解码出错跳转到False状态,通过输出端口将出错信号输出,在得到外部反馈后跳转到初始化状态IDLE。
应用扩展标志段APPn、帧开始标志段SOF0、量化表定义DQT标志段、Huffman码表定义DHT标志段和扫描行开始SOS标志段的解码过程是相似的,在相应标志符后是标志段的长度,可以根据这个长度值,结合JPEG码流语法,进行码流解析,将所需的图像信息如图像尺寸、图像格式、量化表、Huffman码表等写入相应寄存器或者存储器中,以便于后续压缩数据的解码。
Huffman码流解码状态(DeHuffman):在解析完扫描开始标志段SOS后跳转到Huffman码流解码状态,解码图像压缩数据,主要包括Huffman解码、反量化、反Z字形重排、IDCT和输出缓存等。
控制器还负责外部输入的调配工作,每个时钟周期,都将本次解码长度送至码流缓存模块,从而重新定位解码码流位置。因为有多种图像格式,所以控制器还要负责各个模块的亮度色度选择信号的输入。
1.2 码流缓存模块设计
JPEG码流是变长码,数据量大,如果采用传统的解码方法对码字的每个比特进行处理,其输出速率势必不能满足应用要求。JPEG标准中数据编码的最大码长为26,而在标志段解码时要求码长为8的整数倍,所以设计中采用两个32位寄存器、一个32位桶形移位器、一个加法器和一个减法器的组合来实现该功能。其中,寄存器R0负责从外部模块读取数据,并和寄存器R1一起作为桶形移位器的输入缓存。每个解码周期,桶形移位器移出已解码流的同时装载新的待解码流。减法器用于计算已处理码长,传送桶形移位器移位长度,判断并控制R0的读取和R1的更新。加法器用于码流输入时更新寄存器码长和桶形移位器移位长度。这样就为后续处理单元提供了连续不间断的码流,满足了并行解码处理的需求。
桶形移位器的输出是32位,因此每个时钟周期R0、R1必须为其提供32位的有效码流。图3所示给出了桶形移位器输入缓存的更新示例。
1.3 Huffman解码模块设计
Huffman码是变长编码,若采用传统的解码方法[3,4]逐位读入码流,先判断码字长度,再进行解码,效率较低,其解码速率难以满足应用要求。本设计中提出了一种新的Huffman并行解码硬件结构,Huffman符号表可配置,通用性强。用简单的算术运算代替复杂的配对模式,解码速度快、硬件成本低。
1.3.1 Huffman解码算法分析
对于一组概率确定的符号,其最佳Huffman编码有多种码字分配方式。其中一种特殊的分配方式称为单调编码[5],这种编码中长度相等的码字在数值上是单调变化的,JPEG中Huffman编码采用这种方式。单调编码的单调性是指出现概率较大的符号其对应的码字的值一定小于概率小的符号对应的码字值具体说来有两个特性:
(1)在某一特定长度对应的码字集当中,码字大小是连续变化的。
(2)长度短的码字Ck的值一定小于长度比它长的码字Cm,且Ck一定小于Cm的前k位前缀。
根据单调编码的特性,可以证明:对于一个长为X的码字,其长为K(1≤K<X)位前缀码的值总是大于长度为K的最大码字,同时其码字总是小于长度为Y(Y>X)的最小码字的K位前缀。这一结论表明当把一串足够长的码流并行输入码长检测器时,只可能得到惟一的有效码长。
1.3.2 Huffman解码模块的硬件实现
对于一个给定长度L的码字,可以用码长为L的最小码字和该码字相对于最小码字的偏差offset来表示。如果解码器将相同码长的解码符号顺序存储在RAM或者寄存器阵列中,则可以由最小码字的地址和偏差offset得到解码符号。解码符号的地址可由式(1)得到
在Huffman码表定义DHT标志段解码时,可以得到各长度对应的最小码字MinCode、各最小码字的地址BaseAddress和解码符号Symbol,为了后续解码需要,要将这些数据存入存储器中。因为解码包括了亮度DC系数、亮度AC系数、色度DC系数和色度AC系数4种情况,所以相应地需要多个存储器。
表1所示给出了本算法和其他算法的实现比较。可见,本算法的实现在速度和硬件成本综合权衡之下比较有优势。
因为Huffman编码是无损压缩,不存在误差,所以Huffman解码出来的数据也是没有误差的。本设计采用一个简洁的Mealy型状态机实现,状态转移如图4所示。图5所示是相应的Huffman解码硬件结构图。
接下来结合图4和图5介绍Huffman并行解码流程。
(1)初始化状态(IDLE):复位或图像压缩数据解码完成时进入的状态,初始化相关寄存器。
(2)解码状态1(S1):首先寄存从码流缓冲模块输入26位图像码流,将高16位输入码长检测单元,与MinCodeMemory中存储的各长度最小码字并行比较,码长检测单元由选择器、比较器和一个16选4的选择器组成,得到码字的长度L。接着由码长为L的Huffman码与相应长度的最小码字Min(L)计算出偏移量offset,从BaseAddressMemory中取出最小码字Min(L)的地址BaseAddress,将两者输入8位加法器中,由式(1)可计算出该码字对应的解码符号地址。然后根据这个地址从SymbolMemory中取出解码符号,对DC来说是SSSS,对AC来说是RRRRSSSS。同时将移位寄存器中的码字左移L位,将高11位编码输入到幅值寄存器中。
(3)解码状态2(S2):将解析出的字长SSSS和码长L输入到5位加法器中,得出本次解码总位长,输出到码流缓冲模块,用于重新定位码流,更新输入数据。将幅值寄存器的高SSSS位选择输入一个12位中间寄存器的低位,该中间寄存器的高(12-SSSS)位移入幅值寄存器的最高位的相反值,若得到的中间寄存器的最高位为“1”,按JPEG标准,要再加1。这样解析出来的就是频率系数,即DCT系数,对于DC来说就是差值解析完幅值后进行系数解码
DC/AC系数解码:计数器用于计算解析系数在块数据中的位置。若计数器值为零,表示解析出来的是DC系数的差值DIFF,要根据亮度色度选择信号选择相应DCk-1,根据DCk=DIFF+DCk-1计算出DC值,并且更新DCk-1。若计数器值不为零,表示解析出来的是AC值,接下来对应的有4个分支:1)若(RRRR,SSSS)=(0,0),表示此图像块解码结束,输出块解码结束标志DecOneBlock,并清零计数器;2)若(RRRR,SSSS)=(15,0),表示连续16个零系数,计数器加16,不输出;3)若SSSS不为零,且计数器值+RRRR=62,表示解析出来的是图像块的最后一个系数,计数器清零,并输出块解码结束标志DecOneBlock和DCT系数值;4)普通AC系数,计数器加1,输出计数器的值和DCT系数值。
1.4 反量化模块设计
本设计在Huffman解码后没有采用JPEG标准的先反Z字形重排再反量化的流程,而是先进行反量化操作。如此只要Huffman解码有DCT系数输出时才需要进行反量化运算,能减少无效操作,降低功耗。
反量化运算时先将相应的量化系数保存在寄存器阵列中,在Huffman解码模块有DCT系数输入时,按其地址取出相应的量化系数,相乘后输出到后级反Z字形重排模块。
1.5 反Z字形重排模块设计
根据模块输入数据的特点,提出了一种优化的硬件实现结构。因为一个8×8图像块经DCT变换后非零系数个数一般不超过总数据量的10%[6],所以设计中为寄存器阵列的每个寄存器都设定一个一位的使能标志,在初始化时先将寄存器阵列中寄存器和相应标志位都赋零值,在输入值为非零值时才写入相应地址,并置位对应的使能标志,这样在写入数据时不需要进行零数据的存储,而在输出数据时只要根据使能标志就能判断是要读寄存器阵列还是直接输出零,所以可以减少对存储器的读写操作,加快数据处理速度。
反Z字形重排模块不仅要接收反量化后的系数,对其进行反Z字形重排,同时要对图像块数据进行一次行列转置,这样可以节省2个寄存器阵列,降低硬件成本。为了提高运算并行度,提高解码速率,满足后级模块数据要求,反Z字形重排模块中采用了两个64×14位双端口寄存器阵列,进行乒乓操作。
1.6 IDCT模块设计
2D-IDCT的实现选用行列分解法,所以主要功能模块包括1D-IDCT模块和行列转置模块。因为全流水线实现系统解码硬件成本很高,所以设计中主要通过提高运算并行度和在功能模块内部实现流水线运算来提高解码速度。IDCT模块设计中采用了两个1D-IDCT处理单元,并通过流水线技术实现高运算速率。
1.6.1 1D-IDCT模块设计
本设计采用了一种运算量少、数据流简单且适于流水线实现的IDCT算法[7]。通过对1D-IDCT数据流程的合理划分,将其分4级,在每级中间插入寄存器,对每级流水线内部运算的时序进行合理安排,在每级流水线内共享算术单元,降低硬件成本。1D-IDCT快速算法的数据流程如图6所示。
图6中a1=cos(π/4),a2=cos(π/8)-cos(π3/8),a3=cos(π/4),a4=cos(π/8)+cos(π3/8),a5=cos(π3/8)。
通过对1D-IDCT数据流程的合理安排和资源共享,本设计共需4个加法器,4个减法器和4个乘法器,所用硬件资源比较少。而且本设计的处理速度快,每个时钟周期输入两个像素,完成1D-IDCT的延迟时间是6个时钟周期。在流水运算时计算一个8点1D-IDCT只需要4个时钟周期。
1.6.2 行列转置模块设计
行列转置矩阵的实现大部分设计采用双RAM进行乒乓操作完成,本设计采用一个8×8寄存器阵列和方向控制信号完成,可节省一半硬件资源,且控制简单。当有信号输入时,方向控制信号值初始设为0,这时寄存器阵列的输入输出方向是从左到右,64个时钟周期后方向控制信号反向变为1,这时寄存器阵列的输入输出方向是从下到上。如此循环,即可实现行列转置,如图7所示。
2 综合、仿真与性能分析
设计时先用Matlab进行算法级仿真与验证,在RLT级设计时采用Verilog语言实现,在Modelsim 6.1中进行功能仿真,选择VIRTEX 2系列xc2v250器件进行FPGA验证,从软硬件方面都验证了设计的正确性。
使用Synopsys公司的Design Compiler工具在0.18μm的SMICCMOS工艺条件下,对RTL代码进行综合优化。通过设置不同的面积、时序及功耗约束条件,缩短关键路径的延时,时钟频率可达100MHz的最优设计,综合出面积为721 695μm 2,不包括存储单元需要34.6kB标准门。本设计能每秒能够解码1 920×1 080图形25帧以上,所以也能用于一些有低成本需求的监控、录像系统。
3 结束语
介绍了基于静止图像压缩标准JPEG的解码器IP核的设计,描述了硬件设计过程,提出了一种高效、低成本的JPEG解码器架构。设计通过VIRTEX 2平台进行了FPGA验证,并使用Synopsys公司的DC工具在SMIC 0.18μmCMOS工艺条件下,对设计进行面积和时间的优化,在100MHz时钟频率下工作时电路面积为721 695μm 2,每秒能够解码1 920×1 080图形25帧以上。本设计还支持多种图像质量和图像格式,有较宽的压缩比范围,设计具有独立性和完整性,也适用于数码相机、手机和扫描仪等各种应用。
参考文献
[1]CCITT.Digital Compression and Coding of Continuous-toneStill Images-Requirements and Guidelines[S].USA:CCITT,T.81(09/92),1992.
[2]Nelson M,Gailly J L.The Data Compression Book[M].USA:Hungry Minds,Inc,1995.
[3]Bhaskaran V,Konstantinides K,Academic K.Image andVideo Compression Standards Algorithm and Architectures[M].MA,USA:Kluwer Academic,Plenum Publishers,Norwell,1999.
[4]Seung Bae Choi,Moon Ho Lee.High Speed Pattern Matc-hing for AFast Huffman Decoder Consumer Electronics[J].IEEE Transactions on,1995,41(1):97-103.
[5]Van Voorhis D C.Variable-length to Fixed-length Con-version of Minimum-Redundancy Codes[Z].US Patent4 044 347,1977.
[6]刘艳,李宏东.DCT域图像处理和特征提取技术[J].中国图象图形学报,2003,8(2):121-128.
JPEG编码器 第5篇
DMA技术在媒体数据编码中有广泛的应用,其中主要运用了描述符节点链表技术来达到连续传输物理上间断的数据的目的。但是面对媒体数据庞大的传输量,这种技术仍然会占用大量的内存以及CPU时间[1]。以往对DMA技术的改良只针对了媒体数据的存储特点[2,3],但是并没有结合编解码IP的内部特点。
本文将媒体数据的存储特点与编解码IP的内部特点结合起来考虑,研究出一种新的技术,在媒体编解码数据的传输中,大幅降低了其时空开销。
1 系统时空开销分析模型
图1显示了JPEG编码的系统架构示意图。其中在虚线框内的是SoC,另外有DDR RAM作为片外的存储器来存放编码前后的数据。
1.1 CPU和存储系统
JPEG编码系统是一个包含中央处理器(CPU)的片上系统,使用的CPU架构是LEON3的SPARCV8,属于一种32位的RISC。
存储系统包含了片内和片外两部分:片内是个4k个WORD的SRAM,片外是一个16M的DDR RAM。片内的SRAM作为内存,主要用于存储程序代码以及程序运行时的数据段和堆栈段等。另外还有一个十分重要的功能就是在DMA工作在链模式下,比如为JPEG编码IP提供数据传输服务时,用来存放链模式所必需的描述符链表节点。由于JPEG编码过程中数据通常是以1616的宏块为单位来搬运的,为了减轻JPEG编码IP的数据缓冲池的压力,描述符链表的每个节点规定的传输量都不会太大,所以总的数据量较大时,就需要很多个节点来描述本次传输。由于每个节点都要占用一定的内存空间,这样就导致了在完成一次DMA传输之前,首先要耗费大量的时间和空间来配置DMA的描述符链表,这不仅降低了系统的效率,而且给本来就很稀缺的内存资源带来了更大的压力。片外的DDR RAM用于存储待编码图像的源数据以及编码后的JPEG数据,由于JPEG编码算法是固定的,所以DDR RAM的空间开销没有冗余,而且作为一个从设备,只能被动响应读写命令,并没有什么时间上的冗余开销。但是,如果为传输数据而配置的描述链表过大,SRAM中无法存放,就要将其存放在DDR中,而读取外存的效率要比内存低很多。
1.2 DMA控制器
DMA技术是现代片上系统中,为了把CPU从大量的数据搬运指令中解放出来而采用的一种配置方法,较为简单的数据搬运设备,它可以把源端起始地址开始的若干连续数据搬运到对应的目的端。为了减低在实时数据传输、不连续数据传输过程中CPU的参与程度,又引入了描述符链表技术,将一个DMA任务分割成若干子任务,每个任务的配置信息存放在一个节点里,这些节点组成链表存放在内存中,将链表的首地址作为参数传递给DMA。DMA启动后,从内存中读取节点的配置信息,完成传输。
由于在某些情况下,链表中存在着大量的节点,DMA每开始一个节点的传输之前,都要先读取内存中的链表节点,即读取链表节点占用的时间与节点数N为O(N)的关系,当节点很多时,比如JPEG编码,DMA的效率就会低。
1.3 JPEG编码IP
JPEG编码IP用硬件实现部分JPEG编码算法中的环节,如DCT等。由于编码算法需要很长的运算时间,所以内部配有一个数据输入缓冲和一个数据输出缓冲,采用DPRAM的模型实现,如图2所示。由于缓冲区大小有限,所以需要循环利用。容易看出在大小固定的情况下,每次传输的数据量和单次循环内传输的次数存在反比例关系,利用这个关系可以提高传输的效率。
2 DMA的低时空开销技术
本文在现有的DMA技术基础上提出了几种新型的低时空开销技术。
2.1 起始地址自动递增技术
在JPEG编码的应用中,待编码数据为图像数据,其存储格式有一定的特点,如图3所示[4]。由于JPEG编码是以1616大小的宏块为单位进行运算的,所以每次传输的256个数据,并不是全部地址连续的,而是分为了16组16个连续地址数据的传输。普通DMA技术对这种传输的方法是链传输,即将每组传输的配置信息作为一个节点写入内存中,再将16个节点组成一个链表,DMA在传输完成一个节点的内容后,自动查找下一个节点。
很明显,这16组数据传输虽然每组的起始地址都不一样,但是之间却存在着简单的关系:后一组的起始地址是前一组的起始地址加上一个相同的常数得到的,这个常数就是图像的宽度。如果将这个常数和组数(16)作为本次链传输的参数交给DMA,DMA传输好一组16个数据后,会自动的把起始地址与上述常数相加,得到新的起始地址后再次传输,传输16组后终止,如图4所示[3]。应用这种起始地址自动递增技术,不仅大大减少了需要存放在内存中的DMA链传输节点的空间开销,而且也省去了DMA每次都要读取内存中节点信息所花费的时间开销。
2.2 自动循环取址技术
经过编码后的数据,JPEG编码IP会把它们先存放在内部的输出缓冲区中,之后IP根据实际情况,在适当的时候以硬件握手的方式向DMA发出数据传输请求,DMA将缓冲区内的部分数据搬移到存储设备后,会向JPEG编码IP返回一个响应信号。IP内的缓冲区域是采用DPRAM来实现的,由于受到硬件开销的限制,DPRAM的大小设定为2kB(512个字),要比编码后的数据量小得多,所以IP在接收到DMA的响应信号后,会循环利用已清空的区域来存储新的编码数据。
在存储码流的传输中,源地址,即输出缓冲区的地址是循环递增的。比如,缓冲区大小为512个字,一次传输64个字,那么每次传输后地址增加64,经过8次后起始地址就会回到缓冲区头部,而目标地址,即内存中存储编码区域的地址是按照每次64个字递增的。递增可以采用前面的“起始地址自动递增技术”解决时空分配的问题,但由于源地址是循环的,所以每完成8组数据的传输后,就要用一个新的节点来配置DMA,DMA还要重新载入配置信息,这对时间和空间都是一种浪费。
本文引入了自动循环寻址技术,如图5所示,在起始地址自动递增的基础上,当下一个起始地址的值达到循环区域下边缘时,自动返回至循环区域上边缘,边缘信息通过配置寄存器传递给DMA。比如,起始地址从0开始,每次递增64,当到达448时,下一地址本应为512,但512已经配置为循环区域的下边缘,所以下一个地址自动转移到0,完成一个循环。上述的边缘为相对地址,即地址偏移量,并且只须传递给DMA下边缘的偏移量,绝对地址和上边缘可以通过位运算等简单的组合逻辑得出,不需要另外配置,这不但省掉了一部分配置DMA的时间,也降低了复杂性。
2.3 不定长任务的软件中止技术
所谓不定长任务,即不知道任务要传输的总数据量,这与JPEG编码的实际情况相符合,因为对于JPEG编码算法来说,相同分辨率的位图,如果其频率信息存在差别,编码后的大小会有不同。这样,就无法告诉DMA所要传输的总的数据量大小,DMA就无法得知在什么时候该停止传输。
本文中DMA提供了一个用户主动中止传输的功能,因为JPEG编码IP会知道在什么时候已经完成编码,当它通过硬件握手模式传输最后一个数据块并且得到了DMA的响应后,发出一个编码完毕中断给CPU,CPU进入中断服务程序,将DMA配置寄存器的终止位置1,结束DMA的传输。
3 测试结果
将上述对DMA的改进技术结合JPEG编码IP在LEON3的SPARC v8架构上进行了仿真验证。挑选了一幅大小为160320像素的RGB图像进行编码,其中1616的宏块数为200个,输出的大小不确定,按每次64个字来传输。分别测量了在分别使用上述几种DMA技术后的时间与空间开销,见表1,对比后可以发现,本文的设计的确减少了时空资源的开销。
表1中第一项普通模式是DMA工作在链表传输模式下。第二项自动递增是指应用了起始地址自动递增技术后,可以看到这时不论数据输入还是输出,时间和空间的开销都明显的减少了。第三项循环寻址是指采用了循环寻址技术后,由于输入缓冲区的大小与宏块的大小(即一次的传输量)相同,所以与自动递增相比没有变化,但是由于输出数据结构与输入数据结构不同,在采用这种技术后只需要一个描述符就可以让DMA知道所有的传输信息。最终结果是将读取待编码数据所需的时空开销由O(N2)降至O(N),将写回已编码数据的时空开销由O(N)降至O(1)。
4 结束语
本文从媒体数据的存储特点以及编解码IP的内部特点出发,在传统DMA技术的基础上提出了几种新型的低时空开销的数据传输技术起始地址自动递增技术、自动循环寻址技术,实现了JPEG编码应用下,将读取待编码数据所需的时空开销由O(N2)降至O(N),将写回已编码数据的时空开销由O(N)降至O(1)的效果。
参考文献
[1]NADA S.Media processors[C].Tenth Int Conf VLSI Des.India.1997:244-246.
[2]张奇.媒体数字信号处理器IP核关键技术研究[D].浙江大学信息科学与工程学院,万方数据中国学位论文全文数据库,2008.
[3]陈科明,潘剑侠,姚争儿,等.媒体多处理器系统芯片中的高效数据搬运机制[J].微电子学,2008,38(4).
JPEG编码器
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


