航空图像压缩系统的DSP设计及实现
扫描二维码
随时随地手机看文章
目前进行图像压缩的方法很多,主要集中在小波变换、分形压缩、神经网络编码等几个领域。其中小波变换编码凭借其优良的时频特性和多分辨率特性成为最热门的研究方向之一,并在图像压缩领域占据了主导地位。但传统的小波变换计算复杂,且都是在频域进行。1994年,W.Sweldens提出了一种新的小波构造方案——提升小波。它可以进行原位运算,硬件实现时较为容易,且可以节省内存空间,这一点对于提高系统性能、降低系统成本非常重要;和传统的小波变换相比,它可以把计算复杂度减小一半,运算速度非常快;此外,提升方案适合用SIMD(单指令多数据流)来实现,这和DSP的多总线读写结构是一致的[1]。鉴于提升方案的诸多优点,本系统在具体实现时其小波变换部分采用提升算法来实现。
Shaprio于1992年提出了零树编码方案,它采用全新的零树结构来表征小波系数,使小波变换应用于图像压缩的优越性得到了充分的体现[2]。由于零树法高效的性能,人们在其基础上又提出了各种改进方法。1996年,Said和Pearlman提出了基于等级树集合分割的算法——SPIHT算法[3]。该算法也是基于零树思想,但采用集合划分来进行编码,在系数组织方面更有效,压缩效率也更高。SPIHT算法已经成为公认的编码效率最高的算法之一,即使不采用算术编码进行熵编码,编码效率仍然很高,优于前面的零树编码。因此,本系统在具体实现时采用SPIHT算法对小波系数进行编码。
1 软件实现
1.1提升小波的实现
由于图像的非平稳统计特性,任何一组小波基都不可能同时最优地刻画所有的图像特征,因此存在小波基的选取问题。从熵、峰-峰比PPR、广义编码增益、抗误差性能分析等几个方面综合比较,本系统采用Antini9/7作为提升方案的小波基[4]。该小波提升方案的实现过程如下:
Antini9/7的分析滤波器为:
首先对图像进行行变换,然后进行列变换,最后对图像系数按图1所示的规则进行重新排列。
1.2 边界处理问题
在图像压缩的工程应用时,边界处理问题是关键技术之一。如果处理不好,信号将不能完全重构,会直接影响重构图像的质量。对此,提升方案原文中介绍的做法是采用插值细分算法,在边界点重新计算滤波器的系数值,这样就无需对信号进行边界处理[5]。但通过对插值细分算法实现过程的深入研究发现,这样会带来浮点计算等额外的计算量,并且破坏了提升方案原本多读单写的结构特点,使边界处理问题变得非常复杂。此外,对于二维图像处理而言,无需考虑不规则面的情况,在边界点的处理上可以采用相对简单的边界延拓法。经过比较发现,采用边界延拓法处理问题更为简单,不仅计算量大大减少,而且保留了多读单写的结构,效果也不错。因此,本系统在具体实现时用边界延拓法代替提升方案原文中的插值细分算法,实际使用的是全对称延拓方式。
1.3 SPIHT算法的具体实现
对SPIHT算法进行编程实现时,为了提高执行效率,对具体实现过程做了部分改进。
假设LIS为非显著点集链表,每个链表的元素为坐标值(i,j)和类型标志;LIP为非显著点链表,每个链表的元素为坐标值(i,j);LSP为显著点链表,每个链表的元素为坐标值(i,j)。
用C语言对该算法进行实现时,LIP和LSP结构存储了像素点在图像中的坐标位置,根据它可从图像中检索出相应的像素值。对于C6xDSP,这样做需要用多条取数指令辗转访问内存才能获得像素值。但经过分析知道,在编码程序中,仅当对LIS链表中元素进行零树判断和子节点处理时才需要根据坐标进行像素点访问,像素点被放入LIP或者LSP后,只需对像素值进行访问、修改,没有必要再通过坐标进行像素值的访问,可直接在LIP和LSP结构中存储像素值,从而提高编码速度。
在解码时,因为在LIP和LSP的扫描过程中需根据输入位流的0、1值对像素值进行更新,所以必须存储像素点的坐标,由于图像可以改为用一维线性数组存储,故只需在LIP和LSP中存储像素点在图像中的偏移。
1.4 试验结果
采用标准图像Zelda对本系统算法和Shaprio的零树法(EZW)进行测试比较。小波变换分解级数采用六级,试验结果见表1。
从表1可以看出,本系统算法重构图像的信噪比比零树法平均高0.3dB,其性能的优越性是显而易见的。
2 软件优化
本系统算法采用C语言编程实现后,首先在ATEME公司的NVDK6416开发板上进行算法调试和代码优化,主要采用如下优化手段。
2.1基于C语言环境的优化
为了提高程序的执行效率,在编程实现算法时,应采用一些具体的优化手段。在SPIHT编解码中门限值的初始化和逐步降阶中,对于2次幂整数的乘除运算可采用比特的移位操作来代替;尽量少使用局部变量,多使用全局变量和static变量;对于多次重复访问的变量,如for循环中的变量,可设置为register变量;函数调用时,尽量避免传递结构参数,一般用结构指针代替,如果结构是不可修改的,可用常量结构指针代替。
2.2 基于CCS的优化
CCS集成开发环境提供了很多现成的优化方法,可以直接为开发人员所用,常用的有编译器法、使用字访问短型数据、合理采用Const关键字、使用内联函数、循环展开以及编写线性汇编等。
2.3 基于TMS320C6416硬件特征的优化
TMS320C6416的片内存储器容量较小,总共为1Mbit,采用了两级缓存结构。在编制程序和存储数据时,在内存满足的情况下,应使用片内RAM和高速缓存,将核心代码存储在片内的高速缓存或RAM内;若片内内存容量不足,则把使用次数较少的数据放在片外RAM中进行存储。
采用DMA/EDMA传输数据是系统高速采集数据的一个重要手段,在图像实时采集中应用非常广泛。TMS320C6416的EDMA有多种地址生成方式,通过设置各个控制寄存器,可以方便地实现数据重排、一对多和多对一的数据交换等操作,利用这些操作可以大大提高程序效率。
对算法的关键代码部分综合采用上面的各种优化措施,经过反复实验、测试、优化,算法的执行效率得到了明显的提高。优化前后的时间结果比较见表2。
从表中可以看出,优化后系统的执行效率提高了近20倍,较好地满足了系统的实时性要求。
3 硬件实现
本系统采用TI公司的定点芯片TMS320C6416作为核心处理器。此芯片采用了VelociTI.2TM甚长指令字(VLIW)结构,最高工作频率达到720MHz,运算能力达5760 MIPS,是目前性能最高的DSP芯片,特别适合图像压缩等具有较大运算量的场合。由于数据的输入速率和输入量都非常大,因此将高速FIFO用于图像数据缓存非常适合。FIFO只需数据总线和控制信号就可以对其进行读写,开发十分方便;并且可以与TMS320C6416 DSP的同步FIFO进行无缝接口。
图2所示是系统压缩板卡的设计原理框图。
从CCD高分辨率相机送出的数据,经过预处理后由时钟信号控制存储在同步FIFO中,当FIFO出现半满标志时立即以中断方式通知DSP到FIFO中读取数据,同时在FIFO的另一端继续存储原图像数据,并一直以这种方式存取数据。DSP收到中断后立即从FIFO中读取数据,然后对图像进行压缩处理,处理完毕后送到双口RAM(DPRAM)中,进行调制处理后由发射机发射出去。
接收端首先利用接收机接收信号,然后进行信号解调、小波反变换和SPIHT解码,这可以通过PC机或地面工作站来进行,这时只需相应的解压缩软件即可实现。
经过实际测试,结果表明本系统在保持良好的重构图像的情况下较好地满足了系统的实时性要求,并且其它设计指标也均满足设计要求。本系统已经在某航空图像回传系统中得到实际应用。
参考文献
1 刘 泉, 周祖德.基于小波变换的JPEG2000图像压缩研究[J].华中科技大学学报,2002;30(2):75~77
2 J. M. Shaprio. Embedded Image Coding Using Zerotree of Wavelet Cefficients[A]. IEEE Trans on Signal Proc, 1993;41(12):3445~3462
3 A. Said, W. Pearlman. A New, Fast, and Efficient Image Codec Based on Set Partitioning in Hierachical Trees[A]. IEEE Trans On Circuits and Systems for Video Technology, 1993; 6(9): 243~250
4 杨小明.小波变换及其在航空侦察图像回传系统中的应用研究:[硕士学位论文].烟台:海军航空工程学院,1999
5 W.Swedens. The lifting Scheme: A Construction of Second Generation Wavelets. Tech. Rep, 1995;6(2): 511~546