李其虎,任國(guó)強(qiáng),吳欽章, 楊 輝
(1.中國(guó)科學(xué)院光電技術(shù)研究所,成都 610209;2.中國(guó)科學(xué)院研究生院,北京 100149)
紅外技術(shù)作為一種重要的光電成像手段,在軍事探測(cè)以及民用技術(shù)領(lǐng)域占據(jù)著重要地位[1-2]。由于受到無(wú)線帶寬的限制,如何對(duì)紅外圖像高效地傳輸就顯得極為重要。國(guó)外對(duì)此問題早有研究,但由于技術(shù)的保密性,資料較少;國(guó)內(nèi)在此方面的研究則起步較晚。文獻(xiàn)[3]中給出的無(wú)人機(jī)載圖像實(shí)時(shí)傳輸方案的研究在一定程度上解決了傳輸問題,但是其圖像質(zhì)量指標(biāo)、信道編碼效率等均不高,且抗多徑干擾差。因此研究新的數(shù)字圖像傳輸系統(tǒng)已成為迫切需求,圖像壓縮正是圖像數(shù)據(jù)高效傳輸?shù)年P(guān)鍵所在[4-6]?;诩t外序列圖像自身獨(dú)特的特點(diǎn),需要在終端沒有任何損失的情況下恢復(fù)原始信號(hào),故只能采取無(wú)損壓縮算法對(duì)初始信號(hào)進(jìn)行壓縮。在實(shí)際工程中,選擇什么樣的嵌入式系統(tǒng)平臺(tái)來(lái)完成對(duì)紅外圖像壓縮傳輸也是至關(guān)重要的。目前有些紅外圖像處理系統(tǒng)使用FPGA實(shí)現(xiàn)可重構(gòu)計(jì)算系統(tǒng),運(yùn)算速度快,但對(duì)于復(fù)雜算法的實(shí)現(xiàn)難度較高,且靈活性差;而DSP芯片強(qiáng)大的數(shù)據(jù)運(yùn)算處理能力以及FPGA芯片豐富的可編程邏輯資源和I/O接口使得DSP+FPGA的硬件結(jié)構(gòu)成為目前最流行的硬件結(jié)構(gòu)[7]。其中DSP負(fù)責(zé)實(shí)現(xiàn)圖像處理算法,F(xiàn)PGA負(fù)責(zé)實(shí)現(xiàn)各種接口電路以及一些圖像預(yù)處理工作以減輕DSP的負(fù)擔(dān)。
本文根據(jù)實(shí)際工程需求采用Xilinx公司的Virtex2Pro系列FPGA來(lái)完成對(duì)紅外序列圖像的采集;利用其內(nèi)嵌的高速串行通信接口RocketIO,實(shí)現(xiàn)了SRIO協(xié)議;選擇TMS320C6455作為壓縮算法的實(shí)現(xiàn)平臺(tái);利用其內(nèi)部SRIO與FPGA進(jìn)行高速通信。實(shí)驗(yàn)表明SRIO的實(shí)測(cè)傳輸速度約為2.26 Gb/s,完全滿足實(shí)際工程需求。
紅外實(shí)時(shí)圖像處理系統(tǒng)的實(shí)驗(yàn)硬件框圖見圖1。
圖1 紅外圖像處理系統(tǒng)框圖Fig.1 Diagram of infrared image processing system
該結(jié)構(gòu)主要以FPGA+DSP為核心,再加上相應(yīng)的外圍存儲(chǔ)設(shè)備和必要外圍接口(如Camera link口等)。圖1中紅外相機(jī)輸入圖像的大小為256×320,深度為14 bit灰度圖像數(shù)據(jù)。相機(jī)通過(guò)Camera link接口與FPGA進(jìn)行連接。FPGA與DSP之間通過(guò)高速串口(SRIO)相連接。C6455外圍有EMAC網(wǎng)絡(luò)端口,可以實(shí)現(xiàn)千兆網(wǎng)速傳輸。該系統(tǒng)主要用于測(cè)試所設(shè)計(jì)的紅外圖像處理系統(tǒng)的可行性,調(diào)試FPGA對(duì)數(shù)據(jù)的采集、DSP與FPGA之間的數(shù)據(jù)通信以及DSP對(duì)傳送過(guò)來(lái)的數(shù)據(jù)進(jìn)行壓縮在終端能否正常解碼恢復(fù)原始數(shù)據(jù)。實(shí)際應(yīng)用中是將DSP壓縮過(guò)的數(shù)據(jù)通過(guò)無(wú)線網(wǎng)絡(luò)從機(jī)上傳送到接收端。
圖像的編碼方法分為兩類:有損壓縮和無(wú)損壓縮。有損壓縮即允許編碼過(guò)程中丟失一些無(wú)用或作用不大的信息,不能精確地重建原始圖像;無(wú)損壓縮則是編碼過(guò)程中僅僅去除圖像的冗余,圖像信息保證不丟失,從而可以完整地重建原始圖像。近年來(lái)對(duì)無(wú)損壓縮方法的研究大致可以分為兩個(gè)方向:基于預(yù)測(cè)的方法[8]和基于變換的方法[9]。其中基于預(yù)測(cè)方法的無(wú)損壓縮代表性的算法有JPEG+DPCM和已經(jīng)成為無(wú)損壓縮標(biāo)準(zhǔn)的JPEG_LS算法。JPEG的無(wú)損壓縮模式和JPEG_LS算法都只包括預(yù)測(cè)和編碼兩個(gè)環(huán)節(jié),不需要對(duì)原始圖像數(shù)據(jù)進(jìn)行變換和量化。但是JPEG無(wú)損編碼模式的預(yù)測(cè)方式簡(jiǎn)單,一共只提供了8個(gè)線性預(yù)測(cè)器,對(duì)預(yù)測(cè)的結(jié)果與原始數(shù)據(jù)的差值進(jìn)行統(tǒng)一的Huffman編碼。這種簡(jiǎn)單的預(yù)測(cè)模式和統(tǒng)一編碼方式使得JPEG無(wú)損壓縮模式壓縮比并不高;而JPEG_LS算法的編碼采用的是非線性預(yù)測(cè),編碼方式根據(jù)上下文統(tǒng)計(jì)模型所得到的參數(shù)自由選擇Golomb編碼和游程編碼。式(1)給出了JPEG_LS預(yù)測(cè)算法的預(yù)測(cè)公式:
利用預(yù)測(cè)出的 Pi,j值與真實(shí)值 Ni,j之間進(jìn)行差值計(jì)算,對(duì)殘差進(jìn)行相應(yīng)的編碼。由于JPEG_LS算法在編碼時(shí)無(wú)需進(jìn)行變換,且熵編碼算法簡(jiǎn)單、無(wú)損壓縮壓縮比高,使得該算法被廣泛應(yīng)用于眾多需要無(wú)損壓縮的領(lǐng)域。
相對(duì)于預(yù)測(cè)模式無(wú)損編碼,變換模式無(wú)損編碼主要基于整數(shù)DWT的無(wú)損壓縮算法。其中具有代表性的即為SPIHT和JPEG 2000算法。由于SPIHT算法中使用的是鏈表結(jié)構(gòu)方式[10],硬件實(shí)現(xiàn)對(duì)存儲(chǔ)器需求較高,其壓縮比并不高。JPEG 2000無(wú)損壓縮模式也是采用5/3整數(shù)小波進(jìn)行變換[11],對(duì)變換后的數(shù)據(jù)進(jìn)行高性能的EBCOT編碼,從而使得其具有較高的壓縮比。但是實(shí)現(xiàn)起來(lái)復(fù)雜度較高,算法硬件實(shí)現(xiàn)速度較慢??偠灾谛〔ㄗ儞Q編碼方法的最大優(yōu)勢(shì)在于可以實(shí)現(xiàn)嵌入式碼流,即對(duì)重要的圖像信息進(jìn)行優(yōu)先的編碼,但是對(duì)于在需要進(jìn)行無(wú)損壓縮的情況下,這種優(yōu)勢(shì)就并不存在。而基于預(yù)測(cè)的無(wú)損編碼,應(yīng)不需要對(duì)數(shù)據(jù)進(jìn)行變換。算法復(fù)雜度低,實(shí)現(xiàn)起來(lái)要簡(jiǎn)單,使得基于預(yù)測(cè)的無(wú)損編碼方式更多地應(yīng)用于需要無(wú)損壓縮的場(chǎng)合。在PC機(jī)VC 6.0環(huán)境下分別開發(fā)了上述4種無(wú)損壓縮算法,針對(duì)不同圖像(如圖2所示)得到4種算法的壓縮比,如表1所示。
表1 4種算法無(wú)損壓縮性能比較Table 1 Performance of four kinds of lossless compressing arithmetics
再綜合考慮算法的執(zhí)行復(fù)雜度與壓縮比,最終選擇了JPEG_LS作為系統(tǒng)核心壓縮算法。
圖2 測(cè)試圖像Fig.2 Test images
紅外CCD圖像數(shù)據(jù)首先被采集到FPGA內(nèi)實(shí)現(xiàn)的FIFO中,通過(guò)FIFO中的數(shù)據(jù)量控制SRIO接口是否發(fā)起傳輸,從而實(shí)現(xiàn)了FPGA與DSP之間的數(shù)據(jù)通信,當(dāng)一幀圖像數(shù)據(jù)由FPGA傳輸?shù)紻SP中,系統(tǒng)難點(diǎn)在于如何在FPGA內(nèi)實(shí)現(xiàn)SRIO協(xié)議,并保持FPGA與DSP之間的SRIO通信的同步。
首先要在FPGA內(nèi)的高速串行通信接口RocketIO上實(shí)現(xiàn)SRIO接口協(xié)議。我們使用Xilinx公司提供的Core_generator工具來(lái)產(chǎn)生SRIO模塊。設(shè)置SRIO屬性時(shí)要將FPGA設(shè)為主設(shè)備,以發(fā)起讀或?qū)懖僮?,DSP作為SRIO的一個(gè)從設(shè)備,只需要對(duì)主設(shè)備的請(qǐng)求作出響應(yīng)。在生成SRIO模塊后,需要根據(jù)SRIO協(xié)議對(duì)SRIO模塊的一些參數(shù)進(jìn)行調(diào)整,如調(diào)整差分電壓的峰-峰值最小為175 mV,根據(jù)SRIO時(shí)鐘調(diào)整PLL的乘數(shù)因子,是否使用傳輸損耗的自適應(yīng)補(bǔ)償?shù)?,然后才考慮建立與DSP之間的SRIO連接并實(shí)時(shí)檢測(cè)連接狀態(tài),并保持同步。
在FPGA內(nèi)生成的SRIO模塊中有一個(gè)Port_initialized端口信號(hào),如果此信號(hào)為高,則表明FPGA與DSP之間的SRIO連接已建立,此時(shí),就可通過(guò)SRIO接口傳輸數(shù)據(jù)。在FPGA端,通過(guò)NWRITE_R命令向地址0x00900000到0x00910000周期性的寫入數(shù)據(jù),而0x00900000到0x00910000是映射到DSP的L2存儲(chǔ)區(qū)域的,即建立連接后,DSP的存儲(chǔ)區(qū)域?qū)PGA是透明的,只需要在 FPGA內(nèi)寫入到0x00900000到0x00910000地址區(qū)間,就可以將數(shù)據(jù)傳遞到 DSP。SRIO傳輸是以數(shù)據(jù)包的形式進(jìn)行的,因此要考慮如何將多個(gè)包傳遞給DSP。在生成FIFO后,利用FIFO的rd_data_count端口來(lái)發(fā)起SRIO傳輸。rd_data_count記錄的是FIFO中可讀的數(shù)據(jù)量,當(dāng)rd_data_count達(dá)到320時(shí),將傳輸有效信號(hào)置高,這樣,F(xiàn)IFO中的10個(gè)數(shù)據(jù)包就會(huì)通過(guò)SRIO接口傳遞給DSP。由于SRIO傳輸是3.125 Gb/s,保持?jǐn)?shù)據(jù)同步變得尤為重要,所以必須保證lnk_rrdy_n和lnk_trdy_n有效,這兩個(gè)信號(hào)表示了SRIO的正常通信狀態(tài)。另一個(gè)同步問題是圖像幀的同步,由于采集的原始數(shù)據(jù)是以數(shù)據(jù)包的形式傳遞的,而原始數(shù)據(jù)中并沒有圖像幀的幀頭幀尾等信息,本傳輸平臺(tái)用兩個(gè)GPIO信號(hào)來(lái)解決這個(gè)問題。設(shè)定GPIO_1表示幀有效信號(hào),而GPIO_2通知DSP 10個(gè)數(shù)據(jù)包傳輸完成。DSP接收數(shù)據(jù)時(shí),首先檢測(cè)GPIO_1信號(hào)是否有效,若GPIO_1為低,則表明圖像數(shù)據(jù)處于幀效應(yīng)期,只有等到GPIO_2為高時(shí),才能保證圖像數(shù)據(jù)的對(duì)齊,不會(huì)出現(xiàn)圖像數(shù)據(jù)幀的錯(cuò)位現(xiàn)象,即將上一幀的圖像數(shù)據(jù)與當(dāng)前幀的數(shù)據(jù)拼接在一起。由于FPGA是將采集的數(shù)據(jù)連續(xù)不斷地寫入到FIFO,因此,F(xiàn)PGA會(huì)連續(xù)地發(fā)起傳輸,這樣,數(shù)據(jù)就能連續(xù)地通過(guò)SRIO進(jìn)入到DSP。在DSP端通過(guò)設(shè)定一個(gè)計(jì)數(shù)器,當(dāng)DSP接收的數(shù)據(jù)包恰好是一幀圖像數(shù)據(jù)的時(shí)候,DSP就會(huì)進(jìn)行任務(wù)切換,對(duì)傳送過(guò)來(lái)的數(shù)據(jù)進(jìn)行壓縮,將壓縮后的數(shù)據(jù)傳送到PC機(jī)端顯示。在PC機(jī)端,通過(guò)MFC編程,利用Socket網(wǎng)絡(luò)通信,接收從DSP傳輸進(jìn)來(lái)的數(shù)據(jù),并將接收到的數(shù)據(jù)進(jìn)行顯示。
DSP 中算法優(yōu)化有多種[12-13],優(yōu)化也是無(wú)止境的。故只需要將優(yōu)化的速度達(dá)到工程實(shí)際要求即可。
1)存儲(chǔ)器優(yōu)化。實(shí)驗(yàn)表明,若代碼和需要訪問的數(shù)據(jù)在DSP片內(nèi)存儲(chǔ)區(qū)(IRAM),其代碼運(yùn)行速度要比代碼和數(shù)據(jù)片外DDR2中快5倍左右。因此,優(yōu)化首先應(yīng)將執(zhí)行代碼和數(shù)據(jù)放到片內(nèi)以快速提高編碼運(yùn)行速度。
2)編譯器優(yōu)化。CCS中提供眾多參數(shù)選項(xiàng),經(jīng)過(guò)反復(fù)測(cè)試,最終在硬件上運(yùn)行時(shí)最佳選項(xiàng)為-q-o3-mt。實(shí)驗(yàn)測(cè)試結(jié)果表明該編譯器選項(xiàng)打開,程序運(yùn)行速度將提高3倍左右。
3)C代碼優(yōu)化。代碼級(jí)優(yōu)化中的內(nèi)容很多,包括乘法語(yǔ)句的優(yōu)化、浮點(diǎn)運(yùn)算的優(yōu)化、以及inline語(yǔ)句的使用等。在此針對(duì)JPEG_LS算法代碼中判斷轉(zhuǎn)化語(yǔ)句過(guò)多,介紹如何優(yōu)化該類判斷性語(yǔ)句。判斷跳轉(zhuǎn)語(yǔ)句是C程序員在編程時(shí)經(jīng)常使用的一種語(yǔ)句。因?yàn)樗苁拐麄€(gè)程序的結(jié)構(gòu)看起來(lái)很清楚,便于其他程序員閱讀。但大量判斷跳轉(zhuǎn)語(yǔ)句的使用是非常影響程序在DSP上的運(yùn)行速率的。如果在循環(huán)內(nèi)部出現(xiàn)判斷跳轉(zhuǎn)語(yǔ)句,由于每個(gè)跳轉(zhuǎn)指令都會(huì)帶來(lái)5個(gè)延遲間隙,將導(dǎo)致程序執(zhí)行時(shí)間延長(zhǎng)。另外,循環(huán)內(nèi)跳轉(zhuǎn)也將使軟件的軟流水受到阻塞,影響代碼的并行執(zhí)行。因此盡可能用邏輯判斷語(yǔ)句來(lái)代替判斷跳轉(zhuǎn)語(yǔ)句,可以避免不必要的跳轉(zhuǎn),從而提高代碼的執(zhí)行效率。
在對(duì)C代碼優(yōu)化后,對(duì)于耗時(shí)嚴(yán)重的部分,還可以使用線性匯編將其重寫。利用線性匯編改寫程序,可以使程序執(zhí)行時(shí)間大幅度降低。
本文設(shè)計(jì)系統(tǒng)應(yīng)用在光電經(jīng)緯儀中,在夜間對(duì)某機(jī)場(chǎng)起落飛機(jī)進(jìn)行跟蹤實(shí)驗(yàn)。由于紅外圖像每個(gè)像素都是14 bit表示,為了在PC機(jī)中顯示,需要將14 bit數(shù)據(jù)轉(zhuǎn)換成8 bit數(shù)據(jù)(灰度級(jí)為0~255),利用式(2)進(jìn)行轉(zhuǎn)換。
其中:PIR表示原始紅外圖像像素值;Px為轉(zhuǎn)化后的值。
圖3為經(jīng)緯儀中紅外相機(jī)采集到?jīng)]有經(jīng)過(guò)壓縮直接存入保存到硬盤中的紅外圖像,利用式(2)在PC機(jī)中顯示出的結(jié)果。圖4為采集到的紅外圖像經(jīng)過(guò)本文設(shè)計(jì)系統(tǒng)后,傳輸?shù)絇C中,利用式(2)顯示出的結(jié)果。
圖3 原始紅外圖像Fig.3 Original IR image
圖4 解碼后紅外圖像Fig.4 Decoded IR image
實(shí)驗(yàn)結(jié)果表明,如果在DSP中直接對(duì)深度為14 bit的紅外序列圖像進(jìn)行無(wú)損壓縮,則壓縮比大小只有4倍。如果在DSP中將14 bit的紅外圖像采用式(2)轉(zhuǎn)換為8 bit圖像壓縮,則壓縮比可以達(dá)到21倍。故可以根據(jù)實(shí)際工程需求采用不同的方法進(jìn)行壓縮后傳輸。
經(jīng)過(guò)對(duì)兩幅紅外圖像數(shù)據(jù)分析得知,采用本文所述系統(tǒng),將壓縮后的紅外圖像再解壓出來(lái)與原始紅外圖像完全一致。進(jìn)而驗(yàn)證了本文所設(shè)計(jì)系統(tǒng)的正確性。
針對(duì)紅外實(shí)時(shí)圖像處理系統(tǒng)構(gòu)建的FPGA+DSP硬件平臺(tái),考慮到硬件各自的特性和工程的實(shí)際應(yīng)用。以DSP+FPGA為硬件核心平臺(tái),以SRIO為數(shù)據(jù)傳輸?shù)募~帶,比較分析了4種常見的圖像無(wú)損壓縮算法,最后選擇了以JPEG_LS為軟件算法核心,對(duì)紅外序列圖像進(jìn)行傳輸和無(wú)損壓縮。為驗(yàn)證系統(tǒng)的可行性,利用DSP自帶的EMAC網(wǎng)口將壓縮后的數(shù)據(jù)傳輸?shù)絇C機(jī)中,并實(shí)時(shí)顯示。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)圖像壓縮與傳輸性能可靠,可以對(duì)紅外序列圖像達(dá)到27幀/s的無(wú)損壓縮。
[1]XU Hong,WANG Xiangjun.Applications of multispectral/hyperspectral imageing technologies in military[J].Infrared and Laser Engineering,2007,36(1):14-17.
[2]梁海龍,韋志棉,趙葉星.適用于無(wú)人機(jī)圖像傳輸數(shù)據(jù)鏈的同步技術(shù)[J].電光與控制,2010,17(10):68-83.
[3]劉榮科,張曉林.無(wú)人機(jī)載圖像實(shí)時(shí)傳輸方案的研究[J].北京航空航天大學(xué)學(xué)報(bào),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.