基于DSP设计开发的航空图像压缩系统
扫描二维码
随时随地手机看文章
航空图像由于可以提供大量丰富的直观信息,因而在军事侦察、抢险救灾、气象探测等领域得到了广泛应用。 航空图像由于是远距离成像,所以分辨率较低且数据量很大。如果要把拍摄的航空图像实时回传,就必须对其进行压缩编码。由于图像压缩算法复杂,因此决定了回传系统必须采用高速数字信号处理芯片来实现。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开发板上进行算法调试和代码优化,主要采用如下优