一种JPEG2000 压缩算法实现及优化
扫描二维码
随时随地手机看文章
随着多媒体技术的不断运用,图像压缩要求更高的性能和新的特征。为了满足静止图像在特殊领域编码的需求,JPEG2000作为一个新的标准处于不断的发展中。它不仅希望提供优于现行标准的失真率和个人图像压缩性能,而且还可以提供一些现行标准不能有效地实现甚至在很多情况下完全无法实现的功能和特性。这种新的标准更加注重图像的可伸缩表述。所以就可以在任意给定的分辨率级别上来提供一个低质量的图像恢复,或者在要求的分辨率和信噪比的情况下提取图像的部分区域。原始图像数据(例如。bmp位图)首先进行画布坐标标定,然后在画布坐标的基础上进行划分:第一步先划分为不同的分量(component),第二步将画布区域划分为大小相同的矩形“片”(tile),这两个步骤可以互换。在画布坐标系统预处理之后,就是进入JPEG2000的核心阶段之一:离散小波分析(DWT)。小波分析被直接运用于各个片,这样每个片区域都被DWT分析,形成不同的分辨率级别,每个分辨率级别中含有四个子带,这样就为JPEG2000的分辨率递进的功能提供了可能。在这之后,就进入了JPEG2000的第二个核心阶段: 嵌入式优化截断编码(EBCOT)。首先将各个子带进行EBCOT的预处理过程:量化。量化对图像有损压缩负责,而此过程可有可无,用户可以自由选择,因而JPEG2000对有损和无损压缩兼容。预处理过后,进入EBCOT的核心编码阶段,该阶段分为两次,一次编码主要是码块划分和熵编码,二次编码主要是分层打包的过程。最后,码流将会以封包流(pack-stream)的形式传输,包的主头描述了原始图像和不同的分解及编码类型以便查找、提取、解码和重构指定分辨率级、保真度、感兴趣区域和其他特点的图像部分。
1 JPEG2000系统的组成原理
JPEG2000相对于JPEG的最大改进就是以离散小波变换(DWT)代替了DCT编码。JPEG2000的编解码流程如图1所示。本系统首先对源图像数据进行离散小波变换,然后对变换后的小波系数进行量化,接着对量化后的数据熵编码,最后形成输出码流。编码器(encoder),是一种输入模拟视频信号并将它转换为数字信号格式,以进一步压缩和传输的硬件/软件设备。像视频的mpeg4,音频的mp3,ac3,dts等,这些编码器可以将原始数据压缩存放,刚才都是常用的编码格式,还有些专业的编码格式,一般家庭基本不会用到。为了在家用设备或者电脑上重放这些视频和音频则需要用到解码软件,一般称为插件。比如mpeg4解码插件ffdshow,ac3解码插件ac3fliter等。只有装了各种解码插件你的电脑才能重放这些图像和声音。
通过预处理可为不同类型的图像提供一个统一的接口,以便于后续使用同样的编码器进行处理,这一步骤是将多种类型的图像压缩加入到统一框架中的关键。它主要包括三个步骤:图像分片、直流平移和分量变换。
小波的多分辨率分析特性使之既可高效地描述图像的平坦区域,又可有效地表示图像信号的局部突变,它在空域和频域都有良好的局部性,因而能够聚焦到图像的任意细节。
优化截断嵌入块编码(The Embedded BlockCoding with Optimized Truncation,简称EBCOT)是JPEG2000标准的核心,它不仅能对图像进行有效压缩,同时,其产生的码流还具有分辨率可伸缩性、信噪比可伸缩性、随机访问和处理等非常好的特性。
2 Blackfin56l处理器
Blackfin处理器是一类专为满足当今嵌入式音频、视频和通信应用的计算要求和功耗约束条件而设计的新型32位DSP。Blackfin处理器主要基于ADI和Intel公司联合开发的微信号架构(MSA),MSA(MeasurementSystemAnalysis)使用数理统计和图表的方法对测量系统的分辨率和误差进行分析,以评估测量系统的分辨率和误差对于被测量的参数来说是否合适,并确定测量系统误差的主要成分。同时,MSA(maritime safety administration)也是海事安全管理局的英文简称。该器件具有以下特点:
(1)高性能的处理器内核
Blackfin处理器架构基于一个10级RISCMCU/DSP流水线和一个专为实现最佳代码密度而设计的混合16/32位指令集架构。
(2)高带宽DMA能力
Blackfin561具有多个独立的DMA控制器,这些控制器可支持自动数据传输,而且所需的处理器内核开销极少。DMA传输可出现于内部存储器和诸多具有DMA功能的外设之间。
(3)专用视频指令
除了具有对8位数据以及许多像素处理算法所常用的字长的固有支持之外,Blackfin处理器架构还包括专为增强视频处理应用而定义的指令。
(4)高效控制处理
Blackfin561提供有各种各样的微控制器型外设,包括UARTS、SPI、PPI控制器、支持PWM的定时器、看门狗定时器、实时时钟和一个无缝同步和异步存储器控制器。
(5)分层的存储器架构
Blackfin561支持改进的哈佛结构,该结构是具有分级的存储器结构的组合。BF56l器件的地址总线宽度为32位,可以访问4G字节的地址空间。Blackfin处理器的存储器架构在器件实现中可提供Level l(L1)和Level 2(L2)存储模块,并可以通过EBIU外接L3处理器。
3 系统设计
本系统主要实现数字图像的采集和压缩处理。它有效利用了Blackfin561的专用视频接口PPI和其它丰富的接口资源,具有设计简单、便于软件编程的特点。图2所示其系统工作流程及连接框图。
由图2可见,本系统首先由CCD摄像头来采集图像,输入的模拟信号经ADV7183视频编码芯片转换成ITU一656格式的数字视频流,该视频流通过BF561的PPI传输到SDRAM。然后由DSP从SDRAM读入图像,并执行JPEG2000编码操作,最后将压缩视频流输入到输出模块进行传输。
4 JPEG2000算法移植
如果用户导入的Blackfin处理器的C代码能够兼容ANSI C语言,那么,就能直接在Blackfin上进行构建并执行这个“现成的”代码程序。但是结合嵌入式应用环境,移植时还需注意以下几点:
首先要注意不同的平台对数据类型的长度定义可能是不一样的。在程序移植中可以对数据类型使用typedef宏进行定义,如“typedef intINT32;”这样便于移植时更改。
其次,因为嵌入式系统中的存储空间有限,而且是分级的,且不同级别的处理器大小和运算速度均不同。因此,在定义变量时需要考虑其存放地址。通过section(“存储器段名”)语句可以将变量和代码放入指定地址。其中“存储器段名”可在ldf件中设置。
第三为了程序调用方便,PC平台下的C程序会经常使用大量的动态内存分配(如calloc、realloc、new等)。考虑到嵌入式系统的特点,即需要不停的循环处理,因此,应该用静态数组代替动态内存分配。这样不仅可以避免动态内存分配造成的内存碎片问题,同时存储结构也更加清楚明了。
此外,由于源程序中有许多文件操作,而嵌入式系统并不直接支持文件操作,所以应予以剔除,用读写数组的方式来替代。
最后应注意Visual DSP++兼容的C语言库函数。由于它不能识别<malloc.h>等库文件名称,而calloc、malloc等动态内存分配函数均包含在<stdlib.h>中。所以,若要使用malloc,只需在程序中包入<stdlib.h>即可。注意以上几点,C语言源程序就可以在VisualDSP++下运行,从而实现其功能了。
5 程序优化
由于移植后的算法只是简单的实现了图像编码功能,而远不能保证其实时性,因而需要对其进行优化。优化主要涉及浮点转定点运算、代码优化和存储器优化。
5.1 浮点运算转定点运算
Blackfin处理器是一款定点处理器。该处理器本身并不支持float、double等浮点数据类型,而只能通过仿真实现,所以,用Blackfln直接进行浮点运算是很费时的。因而应将小波变换及其它涉及浮点运算的模块全部定点化。
可以将浮点系数乘以一个尺度因子,使其变换成整数。然后在运算过程中再除以尺度因子,这样就避免了浮点操作。同时,Blackfin处理器是针对小数形式进行优化设计的,它提供了大量的运算指令,可以快速的执行定点和小数运算。下面给出小波变换定点化的一段程序:
5.2 代码优化
设计时可以结合具体的硬件环境对代码本身做出大量优化,以使得编译器能够充分的使用硬件循环、软件流水化、矢量化等技术。但是,也应注意一下几个方面:
首先,因为循环是程序中时间消耗最大的部分,所以要把主要精力集中在循环程序的设计上。应尽量使用短循环;避免循环执行的依赖性;确保内部循环次数比外部的多;在循环中应避免条件代码,否则会出现大量控制流延迟;在循环体中不要放函数调用语句。
其次,定点处理器本身不直接支持除法操作,所以,应该尽量避免除法。如“if(X/Y>A/B)”可以写成“if(X*B>A*Y)”。通过移位操作同样可以避免除法,如除以8可以用左移3位来代替。最后,通过查询表的方法也可以避免一些复杂运算。
5.3 存储器优化
存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。计算机中全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。有了存储器,计算机才有记忆功能,才能保证正常工作。按用途存储器可分为主存储器(内存)和辅助存储器(外存),也有分为外部存储器和内部存储器的分类方法。外存通常是磁性介质或光盘等,能长期保存信息。内存指主板上的存储部件,用来存放当前正在执行的数据和程序,但仅用于暂时存放程序和数据,关闭电源或断电,数据会丢失。
Blackfin56l中的存储器采用分层结构,距离核最近的Ll存储器运行速度最快,但容量很小。因此需要对图像数据进行合理的存储器资源分配,以使得绝大多数操作都集中在L1存储器。下面以小波变换为例来进行说明。
本系统中待处理的图像位于SDRAM中。图3所示是DMA双缓冲操作示意图,DMA优化的总体思想是以一行图像数据为基本单位,然后通过DMA把要处理的数据转移到Ll,实现数据的高效处理。传输可采用双缓冲乒乓操作,这样可避免DMA传输数据所耗费的时间。
为了验证JPEG2000编码器在BF56l上移植和优化后的效果,我们对一幅512x512x8bit图像进行测试并给出了相关数据。表l所列为16倍压缩率下优化前后的数据对比。
6 结束语
JPEG2000是新一代图像压缩国际标准。本设计可实现JPEG2000图像压缩算法在DSP上的移植和优化,压缩后的图像具有较高的信噪比。同时经过优化,其编码器的运算速度也得到了很大的提高,可以满足实际应用的需要。最后的结果。
QICK