基于基于FPGA的的JPEG-LS的多路并行译码的多路并行译码
JPEG-LS无损和近无损压缩算法已经在医疗和遥感图像领域得到了广泛应用。在现有的硬件译码中大都采用流
水线处理方式 1.由于FPGA具有系统结构和逻辑单元灵活、集成度高、开发周期短、可适用于较大规模的电路等
优点,因此本设计中采用FPGA作为硬件开发平台,对图片的译码采用多路并行的方。 2.为了节省系统资源,本
设计采用四路并行译码。由于处理的图像信息量比较大,在图片处理过程中需要对数据进行缓存,而在芯片内
部的RAM无法满足要求的情况下,采用外挂RAM对从检测模块和解码模块出来的图片信息进行缓存 3.本多路并
行译码系统主要由检测模块、译码模块和码流分配模块组成。 一 检测模块 检测模块用
JPEG-LS无损和近无损压缩算法已经在医疗和遥感图像领域得到了广泛应用。在现有的硬件译码中大都采用流水线处理
方式 1.由于FPGA具有系统结构和逻辑单元灵活、集成度高、开发周期短、可适用于较大规模的电路等优点,因此本设计中采
用FPGA作为硬件开发平台,对图片的译码采用多路并行的方。 2.为了节省系统资源,本设计采用四路并行译码。由于处理的
图像信息量比较大,在图片处理过程中需要对数据进行缓存,而在芯片内部的RAM无法满足要求的情况下,采用外挂RAM对
从检测模块和解码模块出来的图片信息进行缓存 3.本多路并行译码系统主要由检测模块、译码模块和码流分配模块组成。
一一 检测模块检测模块
检测模块用来对图片信息的头文件进行处理。每一种图像压缩算法,其头文件都有固定的一种格式。在检测模块中,接收
到头文件信息后首先检测标识号是否正确。为了正确提取头文件中的图像信息,设计中设置一个计数器对输入的时钟进行计
数。如果标识号正确,则进入下一个状态并且计数器开始计数;若错误则停留在当前状态检测下一个标识号,计数器保持为
0。标识好并正确后去除标识号信息,从头文件后面的信息中在不同的状态根据计数器的不同分别提取出图像的高、宽、精度
等信息。头文件信息提取完之后,根据码流长度的值判断选择对数据进行缓存。当码流长度依次递减为0时,状态选择跳转为
最初状态,等待下一幅图片的输入。
二二 译码模块译码模块
译码模块是对压缩后的图片信息进行恢复。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位置的样本值,采用同样的方式选择
是常规译码还是游长译码
三三 码流分配模块码流分配模块
3.1 码流分配方案码流分配方案
码流分配模块为多路并行算法的关键,也是本设计的顶层模块,负责对输入码流[5]的走向进行调配。在本设计中采用4个
外挂的RAM存储解码过程中的码流数据。为了节省FPGA系统资源,本设计采用4路并行的方式,如图2所示。首先码流通过
检测模块对图像的头文件进行处理,将处理后的结果顺序缓存到RAM1和RAM2中。当缓存RAM写满之后,RAM中的数据送入
4个译码模块dec1、dec2、dec3、dec4开始译码。译码后的数据顺序缓存到RAM3和RAM4中,然后显示器循环调用RAM3和
RAM4中的数据进行显示。
设计中将每个RAM的地址空间划分为四个部分,分别存放一帧数据中4幅图像的数据。在译码部分提取数据时也可根据
RAM中存放图片的位置对应提取出所要译码图片的信息。为了提高设计的整体性能和效率,设计中对检测模块和译码模块采
用不同频率的时钟,在检测模块采用50 MHz的时钟,译码模块则采用90 MHz的时钟。由于对RAM读写时钟采用不同的频
率,保证了时序控制上有严格的要求。在第一个缓存周期中,从检测模块出来的数据采用乒乓操作的方法[4]首先存储到RAM1
的4个空间中。在第二个缓存周期,如果RAM1存储满、RAM2为空,则检测输出选择信号将切换到RAM2上,开始对RAM2进
行写操作,同时译码模块输入选择信号切换到RAM1并对RAM1中的4幅图像的数据采用流水线方式4路并行译码。在第三个缓
存周期中,如果RAM1译码完成、RAM2写满,则先将RAM1复位,再将检测输出选择信号选择RAM1,并对RAM1进行写操
作,译码输入选择信号选择RAM2,开始对RAM2中的4幅图像译码。对RAM3和RAM4的读写也采用相同的乒乓操作方式。在
第三个缓存周期,译码输出选择RAM3,并对RAM3开始写操作,当RAM3写满、RAM4为空时,进入第四个缓存周期,译码输
出选择对RAM4写操作,屏幕显示调用RAM3中的数据。到下一个操作时序时,RAM3中的数据读完、RAM4存储满,则对
RAM3复位,译码输出选择RAM3,屏幕显示调用RAM4中的数据。如此实现图片的不间断输出。
3.2 乒乓操作并行控制的乒乓操作并行控制的VHDL实现及仿真实现及仿真
评论5
最新资源