Board logo

标题: 航空图像压缩系统的DSP设计及实现(2) [打印本页]

作者: yuyang911220    时间: 2016-11-21 11:32     标题: 航空图像压缩系统的DSP设计及实现(2)

首先对图像进行行变换,然后进行列变换,最后对图像系数按图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有多种地址生成方式,通过设置各个控制寄存器,可以方便地实现数据重排、一对多和多对一的数据交换等操作,利用这些操作可以大大提高程序效率。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0