李其虎,任国强,吴钦章, 杨 辉
(1.中国科学院光电技术研究所,成都 610209;2.中国科学院研究生院,北京 100149)
红外技术作为一种重要的光电成像手段,在军事探测以及民用技术领域占据着重要地位[1-2]。由于受到无线带宽的限制,如何对红外图像高效地传输就显得极为重要。国外对此问题早有研究,但由于技术的保密性,资料较少;国内在此方面的研究则起步较晚。文献[3]中给出的无人机载图像实时传输方案的研究在一定程度上解决了传输问题,但是其图像质量指标、信道编码效率等均不高,且抗多径干扰差。因此研究新的数字图像传输系统已成为迫切需求,图像压缩正是图像数据高效传输的关键所在[4-6]。基于红外序列图像自身独特的特点,需要在终端没有任何损失的情况下恢复原始信号,故只能采取无损压缩算法对初始信号进行压缩。在实际工程中,选择什么样的嵌入式系统平台来完成对红外图像压缩传输也是至关重要的。目前有些红外图像处理系统使用FPGA实现可重构计算系统,运算速度快,但对于复杂算法的实现难度较高,且灵活性差;而DSP芯片强大的数据运算处理能力以及FPGA芯片丰富的可编程逻辑资源和I/O接口使得DSP+FPGA的硬件结构成为目前最流行的硬件结构[7]。其中DSP负责实现图像处理算法,FPGA负责实现各种接口电路以及一些图像预处理工作以减轻DSP的负担。
本文根据实际工程需求采用Xilinx公司的Virtex2Pro系列FPGA来完成对红外序列图像的采集;利用其内嵌的高速串行通信接口RocketIO,实现了SRIO协议;选择TMS320C6455作为压缩算法的实现平台;利用其内部SRIO与FPGA进行高速通信。实验表明SRIO的实测传输速度约为2.26 Gb/s,完全满足实际工程需求。
红外实时图像处理系统的实验硬件框图见图1。
图1 红外图像处理系统框图Fig.1 Diagram of infrared image processing system
该结构主要以FPGA+DSP为核心,再加上相应的外围存储设备和必要外围接口(如Camera link口等)。图1中红外相机输入图像的大小为256×320,深度为14 bit灰度图像数据。相机通过Camera link接口与FPGA进行连接。FPGA与DSP之间通过高速串口(SRIO)相连接。C6455外围有EMAC网络端口,可以实现千兆网速传输。该系统主要用于测试所设计的红外图像处理系统的可行性,调试FPGA对数据的采集、DSP与FPGA之间的数据通信以及DSP对传送过来的数据进行压缩在终端能否正常解码恢复原始数据。实际应用中是将DSP压缩过的数据通过无线网络从机上传送到接收端。
图像的编码方法分为两类:有损压缩和无损压缩。有损压缩即允许编码过程中丢失一些无用或作用不大的信息,不能精确地重建原始图像;无损压缩则是编码过程中仅仅去除图像的冗余,图像信息保证不丢失,从而可以完整地重建原始图像。近年来对无损压缩方法的研究大致可以分为两个方向:基于预测的方法[8]和基于变换的方法[9]。其中基于预测方法的无损压缩代表性的算法有JPEG+DPCM和已经成为无损压缩标准的JPEG_LS算法。JPEG的无损压缩模式和JPEG_LS算法都只包括预测和编码两个环节,不需要对原始图像数据进行变换和量化。但是JPEG无损编码模式的预测方式简单,一共只提供了8个线性预测器,对预测的结果与原始数据的差值进行统一的Huffman编码。这种简单的预测模式和统一编码方式使得JPEG无损压缩模式压缩比并不高;而JPEG_LS算法的编码采用的是非线性预测,编码方式根据上下文统计模型所得到的参数自由选择Golomb编码和游程编码。式(1)给出了JPEG_LS预测算法的预测公式:
利用预测出的 Pi,j值与真实值 Ni,j之间进行差值计算,对残差进行相应的编码。由于JPEG_LS算法在编码时无需进行变换,且熵编码算法简单、无损压缩压缩比高,使得该算法被广泛应用于众多需要无损压缩的领域。
相对于预测模式无损编码,变换模式无损编码主要基于整数DWT的无损压缩算法。其中具有代表性的即为SPIHT和JPEG 2000算法。由于SPIHT算法中使用的是链表结构方式[10],硬件实现对存储器需求较高,其压缩比并不高。JPEG 2000无损压缩模式也是采用5/3整数小波进行变换[11],对变换后的数据进行高性能的EBCOT编码,从而使得其具有较高的压缩比。但是实现起来复杂度较高,算法硬件实现速度较慢。总而言之,基于小波变换编码方法的最大优势在于可以实现嵌入式码流,即对重要的图像信息进行优先的编码,但是对于在需要进行无损压缩的情况下,这种优势就并不存在。而基于预测的无损编码,应不需要对数据进行变换。算法复杂度低,实现起来要简单,使得基于预测的无损编码方式更多地应用于需要无损压缩的场合。在PC机VC 6.0环境下分别开发了上述4种无损压缩算法,针对不同图像(如图2所示)得到4种算法的压缩比,如表1所示。
表1 4种算法无损压缩性能比较Table 1 Performance of four kinds of lossless compressing arithmetics
再综合考虑算法的执行复杂度与压缩比,最终选择了JPEG_LS作为系统核心压缩算法。
图2 测试图像Fig.2 Test images
红外CCD图像数据首先被采集到FPGA内实现的FIFO中,通过FIFO中的数据量控制SRIO接口是否发起传输,从而实现了FPGA与DSP之间的数据通信,当一帧图像数据由FPGA传输到DSP中,系统难点在于如何在FPGA内实现SRIO协议,并保持FPGA与DSP之间的SRIO通信的同步。
首先要在FPGA内的高速串行通信接口RocketIO上实现SRIO接口协议。我们使用Xilinx公司提供的Core_generator工具来产生SRIO模块。设置SRIO属性时要将FPGA设为主设备,以发起读或写操作,DSP作为SRIO的一个从设备,只需要对主设备的请求作出响应。在生成SRIO模块后,需要根据SRIO协议对SRIO模块的一些参数进行调整,如调整差分电压的峰-峰值最小为175 mV,根据SRIO时钟调整PLL的乘数因子,是否使用传输损耗的自适应补偿等,然后才考虑建立与DSP之间的SRIO连接并实时检测连接状态,并保持同步。
在FPGA内生成的SRIO模块中有一个Port_initialized端口信号,如果此信号为高,则表明FPGA与DSP之间的SRIO连接已建立,此时,就可通过SRIO接口传输数据。在FPGA端,通过NWRITE_R命令向地址0x00900000到0x00910000周期性的写入数据,而0x00900000到0x00910000是映射到DSP的L2存储区域的,即建立连接后,DSP的存储区域对FPGA是透明的,只需要在 FPGA内写入到0x00900000到0x00910000地址区间,就可以将数据传递到 DSP。SRIO传输是以数据包的形式进行的,因此要考虑如何将多个包传递给DSP。在生成FIFO后,利用FIFO的rd_data_count端口来发起SRIO传输。rd_data_count记录的是FIFO中可读的数据量,当rd_data_count达到320时,将传输有效信号置高,这样,FIFO中的10个数据包就会通过SRIO接口传递给DSP。由于SRIO传输是3.125 Gb/s,保持数据同步变得尤为重要,所以必须保证lnk_rrdy_n和lnk_trdy_n有效,这两个信号表示了SRIO的正常通信状态。另一个同步问题是图像帧的同步,由于采集的原始数据是以数据包的形式传递的,而原始数据中并没有图像帧的帧头帧尾等信息,本传输平台用两个GPIO信号来解决这个问题。设定GPIO_1表示帧有效信号,而GPIO_2通知DSP 10个数据包传输完成。DSP接收数据时,首先检测GPIO_1信号是否有效,若GPIO_1为低,则表明图像数据处于帧效应期,只有等到GPIO_2为高时,才能保证图像数据的对齐,不会出现图像数据帧的错位现象,即将上一帧的图像数据与当前帧的数据拼接在一起。由于FPGA是将采集的数据连续不断地写入到FIFO,因此,FPGA会连续地发起传输,这样,数据就能连续地通过SRIO进入到DSP。在DSP端通过设定一个计数器,当DSP接收的数据包恰好是一帧图像数据的时候,DSP就会进行任务切换,对传送过来的数据进行压缩,将压缩后的数据传送到PC机端显示。在PC机端,通过MFC编程,利用Socket网络通信,接收从DSP传输进来的数据,并将接收到的数据进行显示。
DSP 中算法优化有多种[12-13],优化也是无止境的。故只需要将优化的速度达到工程实际要求即可。
1)存储器优化。实验表明,若代码和需要访问的数据在DSP片内存储区(IRAM),其代码运行速度要比代码和数据片外DDR2中快5倍左右。因此,优化首先应将执行代码和数据放到片内以快速提高编码运行速度。
2)编译器优化。CCS中提供众多参数选项,经过反复测试,最终在硬件上运行时最佳选项为-q-o3-mt。实验测试结果表明该编译器选项打开,程序运行速度将提高3倍左右。
3)C代码优化。代码级优化中的内容很多,包括乘法语句的优化、浮点运算的优化、以及inline语句的使用等。在此针对JPEG_LS算法代码中判断转化语句过多,介绍如何优化该类判断性语句。判断跳转语句是C程序员在编程时经常使用的一种语句。因为它能使整个程序的结构看起来很清楚,便于其他程序员阅读。但大量判断跳转语句的使用是非常影响程序在DSP上的运行速率的。如果在循环内部出现判断跳转语句,由于每个跳转指令都会带来5个延迟间隙,将导致程序执行时间延长。另外,循环内跳转也将使软件的软流水受到阻塞,影响代码的并行执行。因此尽可能用逻辑判断语句来代替判断跳转语句,可以避免不必要的跳转,从而提高代码的执行效率。
在对C代码优化后,对于耗时严重的部分,还可以使用线性汇编将其重写。利用线性汇编改写程序,可以使程序执行时间大幅度降低。
本文设计系统应用在光电经纬仪中,在夜间对某机场起落飞机进行跟踪实验。由于红外图像每个像素都是14 bit表示,为了在PC机中显示,需要将14 bit数据转换成8 bit数据(灰度级为0~255),利用式(2)进行转换。
其中:PIR表示原始红外图像像素值;Px为转化后的值。
图3为经纬仪中红外相机采集到没有经过压缩直接存入保存到硬盘中的红外图像,利用式(2)在PC机中显示出的结果。图4为采集到的红外图像经过本文设计系统后,传输到PC中,利用式(2)显示出的结果。
图3 原始红外图像Fig.3 Original IR image
图4 解码后红外图像Fig.4 Decoded IR image
实验结果表明,如果在DSP中直接对深度为14 bit的红外序列图像进行无损压缩,则压缩比大小只有4倍。如果在DSP中将14 bit的红外图像采用式(2)转换为8 bit图像压缩,则压缩比可以达到21倍。故可以根据实际工程需求采用不同的方法进行压缩后传输。
经过对两幅红外图像数据分析得知,采用本文所述系统,将压缩后的红外图像再解压出来与原始红外图像完全一致。进而验证了本文所设计系统的正确性。
针对红外实时图像处理系统构建的FPGA+DSP硬件平台,考虑到硬件各自的特性和工程的实际应用。以DSP+FPGA为硬件核心平台,以SRIO为数据传输的纽带,比较分析了4种常见的图像无损压缩算法,最后选择了以JPEG_LS为软件算法核心,对红外序列图像进行传输和无损压缩。为验证系统的可行性,利用DSP自带的EMAC网口将压缩后的数据传输到PC机中,并实时显示。实验结果表明,该系统图像压缩与传输性能可靠,可以对红外序列图像达到27帧/s的无损压缩。
[1]XU Hong,WANG Xiangjun.Applications of multispectral/hyperspectral imageing technologies in military[J].Infrared and Laser Engineering,2007,36(1):14-17.
[2]梁海龙,韦志棉,赵叶星.适用于无人机图像传输数据链的同步技术[J].电光与控制,2010,17(10):68-83.
[3]刘荣科,张晓林.无人机载图像实时传输方案的研究[J].北京航空航天大学学报,2002,28(2):208-212.
[4]CAO Libao,ZHAO Baojun.High-speed real-time data compression system based on C64X [J].Infrared and Laser Engineering,2007,36(3):403-407.
[5]DEEVER A T,HEMAMI S S.Efficient sign coding and estimation of zero-quantized coefficients in embedded wavelet image codecs[J].IEEE Trans Image Process,2003,12(4):420-430.
[6]DEEVER A T,HEMAMI S S.Lossless image compression with projection-based and adaptive reversibie integer wavelet transforms[J].IEEE Trans Image Process,2003,12(5):489-499.
[7]PAN Xiaodong,CHEN Zexiang,GAO shengjiu,et al.Collection and display of infrared image data on FPGA+DSP[J].Infrared and Laser Engineering,2007,36(6):968-971.
[8]WANG Wencheng,LU Jinming,ZHANG Yonglin.Predictive coding and disposal of quantized error for lossless compression of image[J].Journal of Optoelectronics·Laser,2004,15(5):608-611.
[9]PAN Hong.A binary wavelet transform-based loosless image coding algorithm[J].Journal of Electronics& Information Technology,2008,30(7):1671-1675.
[10]SAID A,PEARLMAN W A,SENIOR M.A new fast and efficient image codec based on set partitioning in hierarchical trees[J].IEEE Transaction on Circuits and Systems forVideo Technology,1996,6(3):243-250.
[11]TAUBMAN D S,MARCELLIN M W.JPEG 2000 image compression fundamentals,standards and pracyice[M].Kluwer Academic Publishers,2001:130-135.
[12]TMS320C6000 optimizing compiler user’s guide[Z].Texas Instruments Incorporated,2002:262-264.
[13]XU Yong,XU Zhiyoug,ZHANG Qiheng,et al.Low complexity image compression scheme for hardware implementation[J].Optics and Precision Engineering,2009,9(17):2263-2268.