你的位置:EETOP 赛灵思(Xilinx) 社区 >> >> 全部 >> 详细内容

JPEG-LS多路并行译码的FPGA实现

发布者:jackzhang 时间:2010-12-29 20:11:14

JPEG-LS无损和近无损压缩算法已经在医疗和遥感图像领域得到了广泛应用。在现有的硬件译码中实现高性能的JPEG-LS译码大都采用流水线处理方式[1]。并行运算在硬件译码中的应用使得其相对于软件译码更有明显的优势。由于FPGA具有系统结构和逻辑单元灵活、集成度高、开发周期短、可适用于较大规模的电路等优点,因此本设计中采用FPGA作为硬件开发平台,对图片的译码采用多路并行的方式[2]来实现高速译码。为了节省系统资源,本设计采用四路并行译码。由于处理的图像信息量比较大,在图片处理过程中需要对数据进行缓存,而在芯片内部的RAM无法满足要求的情况下,采用外挂RAM对从检测模块和解码模块出来的图片信息进行缓存[3]。本多路并行译码系统主要由检测模块、译码模块和码流分配模块组成。
1 检测模块
 检测模块用来对图片信息的头文件进行处理。对于每一种图像压缩算法,其头文件都有固定的一种格式。在检测模块中,接收到头文件信息后首先检测标识号是否正确。为了正确提取头文件中的图像信息,设计中设置一个计数器对输入的时钟进行计数。如果标识号正确,则进入下一个状态并且计数器开始计数;若错误则停留在当前状态检测下一个标识号,计数器保持为0。标识好并正确后去除标识号信息,从头文件后面的信息中在不同的状态根据计数器的不同分别提取出图像的高、宽、精度等信息。头文件信息提取完之后,根据码流长度的值判断选择对数据进行缓存。当码流长度依次递减为0时,状态选择跳转为最初状态,等待下一幅图片的输入。
2 译码模块
   译码模块是对压缩后的图片信息进行恢复。JPEG-LS的编码方法是一种利用Glomb编码和上下文建模的编码方法。
 建模建立在上下文的基础上。在上下文建模时,每个样本值都是以周围几个像素的值为条件的,要确定一个概率分布用来编码当前样本值。若样本为x,如图1所示,上下文是由图中a、b、c、d 4个位置的重建样本值来确定的。图像数据的扫描顺序是按从左到右从上到下进行。通过对4个重建样本值计算出3个梯度值D1、D2、D3,然后根据3个梯度值决定对x位置的样本值采用游长编码还是采用常规编码。当梯度值D1、D2、D3全为0时或者全部小于近无损压缩控制的压缩比控因子(NEAR)值时选择游长编码,否则选择常规编码。
    常规编码主要是一个对预测值、预测误差的编码过程和一个变量更新过程。在上下文建模之后是预测过程。预测值是由如图1所示的a、b、c、d位置的样本重建值对x位置的样本值的一个预测。预测误差则是预测值与实际值之间的差值。预测误差后则根据上下文对其修正补偿在预测过程中的系统偏差。对近无损压缩而言,要对预测误差进行量化。

    在游长编码中,如果a、b、c、d位置的样本重建值的梯度值均为0,或者样本重建值之间梯度值在近无损压缩控制因子的范围之内,则上下文建模选择游长编码。游长编码过程不需要对样本预测值和预测误差编码,编码器从x位置开始对连续出现样本值相同的样本均用a位置的样本值来重建,直到样本值之间的梯度值不满足要求,或者到本行结束时,结束游长编码。
    图像的解码过程和编码过程大致相同,即根据上下文之间重建样本值的关系来确定x位置的样本值,采用同样的方式选择是常规译码还是游长译码。

JPEG-LS无损和近无损压缩算法已经在医疗和遥感图像领域得到了广泛应用。在现有的硬件译码中实现高性能的JPEG-LS译码大都采用流水线处理方式[1]。并行运算在硬件译码中的应用使得其相对于软件译码更有明显的优势。由于FPGA具有系统结构和逻辑单元灵活、集成度高、开发周期短、可适用于较大规模的电路等优点,因此本设计中采用FPGA作为硬件开发平台,对图片的译码采用多路并行的方式[2]来实现高速译码。为了节省系统资源,本设计采用四路并行译码。由于处理的图像信息量比较大,在图片处理过程中需要对数据进行缓存,而在芯片内部的RAM无法满足要求的情况下,采用外挂RAM对从检测模块和解码模块出来的图片信息进行缓存[3]。本多路并行译码系统主要由检测模块、译码模块和码流分配模块组成。
1 检测模块
 检测模块用来对图片信息的头文件进行处理。对于每一种图像压缩算法,其头文件都有固定的一种格式。在检测模块中,接收到头文件信息后首先检测标识号是否正确。为了正确提取头文件中的图像信息,设计中设置一个计数器对输入的时钟进行计数。如果标识号正确,则进入下一个状态并且计数器开始计数;若错误则停留在当前状态检测下一个标识号,计数器保持为0。标识好并正确后去除标识号信息,从头文件后面的信息中在不同的状态根据计数器的不同分别提取出图像的高、宽、精度等信息。头文件信息提取完之后,根据码流长度的值判断选择对数据进行缓存。当码流长度依次递减为0时,状态选择跳转为最初状态,等待下一幅图片的输入。
2 译码模块
   译码模块是对压缩后的图片信息进行恢复。JPEG-LS的编码方法是一种利用Glomb编码和上下文建模的编码方法。
 建模建立在上下文的基础上。在上下文建模时,每个样本值都是以周围几个像素的值为条件的,要确定一个概率分布用来编码当前样本值。若样本为x,如图1所示,上下文是由图中a、b、c、d 4个位置的重建样本值来确定的。图像数据的扫描顺序是按从左到右从上到下进行。通过对4个重建样本值计算出3个梯度值D1、D2、D3,然后根据3个梯度值决定对x位置的样本值采用游长编码还是采用常规编码。当梯度值D1、D2、D3全为0时或者全部小于近无损压缩控制的压缩比控因子(NEAR)值时选择游长编码,否则选择常规编码。
    常规编码主要是一个对预测值、预测误差的编码过程和一个变量更新过程。在上下文建模之后是预测过程。预测值是由如图1所示的a、b、c、d位置的样本重建值对x位置的样本值的一个预测。预测误差则是预测值与实际值之间的差值。预测误差后则根据上下文对其修正补偿在预测过程中的系统偏差。对近无损压缩而言,要对预测误差进行量化。

    在游长编码中,如果a、b、c、d位置的样本重建值的梯度值均为0,或者样本重建值之间梯度值在近无损压缩控制因子的范围之内,则上下文建模选择游长编码。游长编码过程不需要对样本预测值和预测误差编码,编码器从x位置开始对连续出现样本值相同的样本均用a位置的样本值来重建,直到样本值之间的梯度值不满足要求,或者到本行结束时,结束游长编码。
    图像的解码过程和编码过程大致相同,即根据上下文之间重建样本值的关系来确定x位置的样本值,采用同样的方式选择是常规译码还是游长译码。

    设计中用来控制RAM读操作的信号有write_full1,它是判断RAM1是否写满的标志。复位时,write_full1为0,当一帧输入码流存储到RAM1中后,write_full1为1。RAM2的满标志用write_full2信号来判断。dec_end1为RAM1中信息译码结束标志,RAM1中信息译码结束时dec_end1为1,复位时dec_end1为0。dec_end1_delay为dec_end1的一个时钟延迟信号。dec_end2和dec_end2_delay分别为RAM2译码结束标志和对译码标志的一个延时。dec_permit为RAM1、RAM2的译码允许标志。ram1_rd、ram2_rd分别为RAM1、RAM2的读信号。dec_start1、dec_start2分别为RAM1和RAM2开始译码的标志位。
    当dec_end1_delay=0、dec_end1=1时,dec_permit=1。当dec_end2_delay=0、dec_end2=1时,dec_permit=0。
    当write_full1=1、dec_end1=0、dec_permit=0时,RAM1的译码开始标志位为1,表示开始对RAM1的译码。当write_full2=1、dec_end2=1、dec_permit=1时,RAM2的译码开始标志位为1,表示开始对RAM2的译码。
    图4为RAM1读操作控制波形图。从图中可以看出,4个译码模块采用流水线的方式根据RAM的地址分别读取4幅图像的数据进行解码。

    本设计采用4路并行译码的方式,芯片的面积利用率为90%,虽然占用的逻辑单元数量比较多,但是译码速度却有很大提高,充分体现出面积和速度之间的关系。设计是在ISE7.1的软件环境下进行综合的。译码部分使用逻辑单元数目为4 414个,占所用逻辑单元总数的17%,使用片内RAM为11个,占片内RAM总数的3%,综合频率达到了135.485 MHz。采用90 MHz的时钟译码,使得译码图像输出帧之间相隔约9 ms,真正实现了图片译码的实时传输。在测试阶段采用多幅遥感图像对多路译码器进行了测试,实验结果表明,在采用多路并行译码的情况下,能够实现快速、准确的传输。本设计具有很好的可移植性,能够应用到图片处理的许多领域中。
参考文献
[1] PAPADONIKOLAKIS M E, KAKAROUNTAS A P. Efficient high-performance implementation of JPEG2LS encoder[J]. Journal of Real-time Image, 2008(3):303-307.
[2] 王浩,刘文怡,韩志军.多通道同步数据采集与处理系统的设计与实现[J].通信技术,2009,42(1):297-299.
[3] 庄怀宇,吴成柯,邓家先,等.JPEG2000 T2编码快速算法及硬件实现[J].系统工程与电子技术,2004,26(12):1939-1942.
[4] 王智,罗新民.基于乒乓操作的异步FIFO设计及VHDL实现[J].电子工程师,2005,31(6):13-16.
[5] 邓家先,肖江,吴成柯,等.JPEG2000的重要性编码[J].电路与系统学报,2003,8(5):145-148.

最新课程

  • 深入浅出玩儿转FPGA

    本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念

  • 从零开始大战FPGA基础篇

    本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“

  • Verilog基础及典型数字

    课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了