航空图像压缩系统的DSP设计及实现
2007-03-09
摘要:根据航空图像压缩系统的特点和要求,选择提升小波+SPIHT算法作为系统的实现方案。为了提高算法的执行效率,对提升小波中的边界处理问题进行了合理简化,同时对SPIHT算法的实现进行了改进。根据系统的实时性要求,选择TI公司的TMS320C6416 DSP芯片作为系统的实现内核,并采用优化设计对关键代码进行优化,最后给出了系统的硬件实现框图。
关键词:图像压缩 DSP 提升小波 SPIHT算法
航空图像由于可以提供大量丰富的直观信息,因而在军事侦察、抢险救灾、气象擦测等领域得到了广泛应用。航空图像由于是远距离成像,所以分辨率较低且数据量很大。如果要把拍摄的航空图像实时回传,就必须对其进行压缩编码。由于图像压缩算法复杂,因此决定了回传系统必须采用高速数字信号处理芯片来实现。DSP作为当前运算性能最高的信号处理芯片,成为实现系统方案的最佳选择。
目前进行图像压缩的方法很多,主要集中在小波变换、分形压缩、神经网络编码等几个领域。其中小波变换编码凭借其优良的时频特性和多分辨率特性成为最热门的研究方向之一,并在图像压缩领域占据了主导地位。但传统的小波变换计算复杂,且都是在频域进行。1994年,W.Sweldens提出了一种新的小波构造方案--提升小波。它可以进行原位运算,硬件实现时较为容易,且可以节省内存空间,这一点对于提高系统性能、降低系统成本非常重要;和传统的小波变换相比,它可以把计算复杂度减小一半,运算速度非常快;此外,提升方案适合用SIMD(单指令多数据流)来实现,这和DSP的多总线读写结构是一致的。鉴于提升方案的诸多优点,本系统在具体实现时其小波变换部分采用提升算法来实现。
Shaprio于1992年提出了零树编码方案,它采用全新的零树结构来表征小波系数,使小波变换应用于图像压缩的优越性得到了充分的体现。由于零树法高效的性能,人们在其基础上又提出了各种改进方法。1996年,Said和Pearlman提出了基于等级树集合分割的算法--SPIHT算法。该算法也是基于零树思想,但采用集合划分来进行编码,在系统组织方面更有效,压缩效率也更高。SPIHT算法已经成为公认的编码效率最高的算法之一,即使不采用算术编码进行熵编码,编码效率仍然很高,优于前面的零树编码。因此,本系统在具体实现时采用SPIHT算法对小波系数进行编码。
1 软件实现
1.1 提升小波的实现
由于图像的非平稳统计特性,任何一组小波基都不可能同时最优地刻画所有的图像特征,因此存在小波基的选取问题。从熵、峰-峰比PPR、广义编码增益、抗误差性能分析等几个方面综合比较,本系统采用Antini9/7作为提升方案的小波基。该小波提升方案的实现过程如下:
Antini9/7的分析滤波器为:
这里,
=-1.586134342,
=-0.05298011854,
=0.8829110762,
=0.4435068522,
=1.149604398。
行算法为:
首先对图像进行行变换,然后进行列变换,最后对图像系统按图1所示的规则进行重新排列。
1.2 边界处理问题
在图像压缩的工程应用时,边界处理问题是关键技术之一。如果处理不好,信号将不能完全重构,会直接影响重构图像的质量。对此,提升方案原文中介绍的做法是采用插值细分算法,在边界点重新计算滤波器的系数值,这样就无需对信号进行边界处理。但通过对插值细分算法实现过程的深入研究发展,这样会带来浮点计算等额外的计算量,并且破坏了提升方案原本多读单写的结构特点,使边界处理问题变得非常复杂。此外,对于二维图像处理而言,无需考虑不规则面的情况,在边界点的处理上可以采用相对简单的边界延拓法。经过比较发现,采用边界延拓法处理问题更为简单,不仅计算量大减少,而且保留了多读单写的结构,效果也不错。因此,本系统在具体实现时用边界延拓法代替提升方案原文中的插值细分算法,实际使用的是全对称延拓方式。
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的零树法(FZW)进行测试比较。小波变换分解级数采用六级,试验结果见表1。
表1 压缩性能比较
压缩比
PSNR(峰-峰信噪比)
小波变换+EZW算法
提升方案+SPIHT算法
32:1
36.33
36.76
64:1
33.94
34.11
128:1
31.31
31.58
256:1
28.52
29.05
从表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。
表2 系统解码算法的消耗时间(秒)
时间
压缩比
优化前
优化后
32:1
1.576
0.082
64:1
1.448
0.071
128:1
1.112
0.058
256:1
0.985
0.049
从表中可以看出,优化后系统的执行效率提高了近20倍,较好地满足了系统的实时性要求。
3 硬件实现
本系统采用TI公司的定点芯片TMS320C6416作为核心处理器。此芯片采用了VelociTI.2TM甚长指令字(VLIW)结构,最高工人频率达到720MHz,运算能力达5760MIPS,是目前性能最高的DSP芯片,特别适合图像压缩等具有较大运算量的场合。由于数据的输入速率和输入量都非常大,因此将高速FIFO用于图像数据缓存非常适合。FIFO只需数据总线和控制信号就可以对其进行读写,开发十分方便;并且可以与TMS320C6416 DSP的同步FIFO进行无缝接口。
图2所示是系统压缩板卡的设计原理框图。
从CCD高分辨率相机送出的数据,经过预处理后由时钟信号控制存储在同步FIFO中,当FIFO出现半满标志时立即以中断方式通知DSP到FIFO中读取数据,同时在FIFO的另一端继续存储原图像数据,并一直以这种方式存取数据。DSP收到中断后立即从FIFO中读取数据,然后对数据进行压缩处理,处理完毕后送到双口RAM(DPRAM)中,进行调制处理后由发射机发射出去。
接收端首先利用接收机接收信号,然后进行信号解调、小波反变换和DPIHT解码,这可以通过PC机或地面工作站来进行,这时只需相应的解压缩软件即可实现。
经过实际测试,结果表明本系统在保持良好的重构图像的情况下较好地满足了系统的实时性要求,并且其它设计指标也均满足设计要求。本系统已经在某航空图像回传系统中得到实际应用。
进入嵌入式查看更多内容>>
相关电子头条文章