毛 偉,隋修寶,陳 錢,顧國華
(南京理工大學電光學院404系,江蘇南京210094)
紅外圖像在軍事和民用領域都有廣泛的應用[1],隨著科技的進步發展,紅外圖像的應用和處理要求越來越高,很多時候需要在不同平臺上對紅外圖像進行傳輸、處理和顯示。
FPGA(Field-Programmable Gate Array),即現場可編程門陣列,具有靈活性強,能夠完成編程、修改和再編程操作的優點,同時它的開發周期短、風險小,因此被廣泛的應用于數據處理和傳輸中。以ARM為核心的嵌入式系統具有設計方便靈活、功耗低、可裁剪和性價比高的優點,它長于事物管理,常被用來做界面及相關應用程序,因其在控制方面的優勢,ARM被廣泛地應用于各種終端設備的開發[2],但是由于主頻低等因素的限制,在面對大量數據處理例如實時圖像處理的時候,ARM總是顯得難以完全達到要求,例如文獻[3]所處理的紅外視頻處理就無法完全實時顯示,同時還存在300ms的延時[3],文獻[4]中使用重繪函數 Paint-Event()[4]函數實現圖像顯示的方法效率也不高等。這些缺點嚴重限制了它們在紅外圖像處理上的應用。
為克服上述缺點,本文以FriendlyArm公司的Tiny210ARM開發板為基礎,采用所設計的方法實現了將大小為320×240的紅外圖像從FPGA傳輸到ARM開發板上,并實現了紅外圖像的實時處理(插值、偽彩色等)、顯示和采集,提升了ARM在處理紅外圖像上的效率。本文主要分為三部分,第一部分介紹了圖像數據從FPGA到ARM的傳輸,而全文重點在于第二、三部分介紹的圖像接收、處理和顯示,以及整個實驗驗證的結果。
開放系統互聯(OSI)模型將網絡通信工作分為了物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。本設計中主要涉及是前四層,物理層PHY使用的是Marvell公司的88E1111網絡傳輸芯片;數據鏈路層使用的是Ethernet II幀封裝包;網絡層采用的是IP協議;傳輸層則是使用的是UDP(User Datagram Protocol)用戶數據報協議。數據鏈路層的作用是完成圖像數據的打包發送,是本設計的關鍵部分之一。
圖1為Ethernet II幀格式,按順序依次為前導碼(Preamble),幀起始界定符(SFD),接收端的MAC地址DA,發送端的MAC地址SA,類型Type,發送的數據 Data,幀校驗序列(FCS)[5]。

圖1 Ethernet II幀格式Fig.1 Ethernet II frame format
數據鏈路層由兩部分組成:上層的邏輯鏈路控制層(LLC)和下層的介質訪問控制層(MAC)。MAC主要負責控制與連接物理層(PHY)的物理介質,將要發送的數據發送到PHY。由于當前大部分的ARM開發板所帶的網卡都只能支持100Mbps,而我們所傳輸的是320×240面陣的紅外圖像,百兆網絡的速度已經足夠,故本論文僅討論百兆網的網絡傳輸,設計采用易于實現的RGM II接口,對應工作頻率為25 MHz。
FPGA實現的MAC邏輯功能結構如圖2所示,采集的圖像數據經過量化處理后,首先進入SRAM,通過乒乓存儲的方式緩存起來,然后再將圖像數據讀出來進行幀封裝,為便于接收端更好的恢復圖像數據,本設計在每一行數據之前加上了行號。圖像數據加上了事先寫在ROM里面的UDP包頭、IP包頭和Ethernet II幀頭數據后被送入了循環冗余校驗碼(CRC)計算模塊,CRC模塊計算出每一幀的FCS值后再送入發送模塊,與前面的幀頭數據和圖像數據連接在一起,送入PHY層發送出去。

圖2 MAC邏輯功能結構Fig.2 The MAC logic functions structure
在整個Ethernet II幀的頭部和尾部,有三個校驗和必須正確填充,否則就無法正確的傳輸。
IP包頭的校驗和是只計算IP首部的校驗和,其計算方法是:首先把校驗字段置為0,然后對首部中每個16位進行二進制反碼求和,然后把結果存放檢驗的字段中。接收方在收到一個IP數據報后,同樣對首部中每個16位進行二進制反碼的求和,如果傳輸過程沒有出錯,計算結果應為全1,否則認為出錯,將該數據報丟棄。
UDP的校驗和是將首部和數據部分一起都檢驗,計算的時候需要引入偽首部,過程較為繁瑣,但是這部分不是必須的,如果不用,只需將UDP的校驗和字段的16位全部填入0即可。
FCS是在 CRC計算的基礎上得到的,IEEE802.3規定參與FCS計算的數據是除了Ethernet II幀的前導碼和幀起始界定符的其他數據。在本設計中,用的CRC_32生成多項式為:G(x)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1,串行CRC編碼器原理如圖3所示[6]。
由于以太網數據是低比特先傳,而CRC核心電路是高比特先進,故在進行CRC計算之前,還要先對輸入數據進行倒序,然后再傳入CRC計算模塊。對于CRC模塊的輸出數據,還要進行取反和與之前相同的位序變化操作后,才能得出最終的正確的 FCS[7]。

圖3 CRC串行編碼器Fig.3 CRC serial encoder
最終,通過Signal Tap II可以得到的數據報發送波形圖,如圖4、圖5所示。圖5是圖4的局部放大圖,其中,TX_EN為發送使能信號,直接送給PHY的TX_EN端口,fifoout[3:0]為發送數據,送給PHY的TXD[3:0]端口,25MOUT為發送時鐘,送給PHY的GTX_CLK端口。


圖5 數據發送波形圖2Fig.5 Data transmission waveform 2
本設計所使用的開發軟件是Qt Creator,它是一款用于Qt開發的輕量級跨平臺集成開發環境。它既可以開發GUI(Graphical User Interface)程式,也可用于開發非GUI程式,比如控制臺工具和服務器。Qt可以開發基于Linux上的圖形應用程序,這些圖形應用程序可以順利地移植到其他的操作系統上,也可以移植到嵌入式操作系統。
Tiny210是FriendlyArm公司研制和發售的一款高性能Cortex A8核心板,配備有一個分辨率為800×480的7寸LCD屏,它采用三星公司的S5PV210為主處理器,運行主頻可達1GHZ,該處理器出色的性能使得Tiny210非常適合廣告多媒體終端、智能家居、高端監控系統等設備。
當ARM系統收到了網絡圖像數據的時候,數據的接收處理速度極大地影響了圖像的顯示效果,在早期的ARM系統上,由于ARM芯片的主頻不夠,處理速度較慢,在面對大量的數據處理的時候,總顯得力不從心。隨著ARM芯片性能的提升,其運行速度越來越快,功能也越來越健全,使得紅外圖像的處理能夠在ARM上得以實施。但是,即使如此,要想在ARM上做實時圖像顯示仍然不是那么容易。很多時候,并不是ARM的處理速度不夠,而是利用效率太低,當我們要處理的圖像稍大的時候,ARM就不能做到實時。
FrameBuffer是一種驅動程序接口。這個設備的主要作用是供用戶態進程實現直接寫屏操作。該接口的工作機制是模仿顯卡的功能,它將顯卡硬件結構抽象掉,同時能夠通過Framebuffer接口的讀寫直接對顯存進行操作。我們可以將Framebuffer看成是顯示內存的一個映像,將它映射到進程的地址空間之后,就可以直接進行讀寫操作,而寫操作可以立即反應在屏幕上,我們將圖像數據寫進映射的內存中就能立即在屏幕上顯示對應的圖像。
多線程程序作為一種多任務、并發的工作方式,能夠提高應用程序響應速度。這對圖形界面的程序的意義尤其重要,當程序在進行一個操作耗時很長的任務時,整個系統在等待這個操作而無法響應鼠標、鍵盤、菜單等的操作,而我們使用多線程技術,將耗時長的操作置于一個新的線程,就可以避免這種情況,提高程序的效率。
因此,本文根據ARM在圖像處理上的這些缺點,結合FrameBuffer和多線程的特點提出了一種新的圖像接收處理和顯示方式,其主要思想就是:通過增開GUI主線程以外的子線程來專門負責就收和處理圖像數據,再通過FrameBuffer接口直接實現對液晶屏的寫屏,將處理后的圖像數據直接顯示出來,這樣在圖像實時顯示的問題上不用通過費時的Qt圖像處理類來實現,使圖像的顯示和處理分開,大大的提高了顯示的效率,能夠很好的實現圖像的實時顯示。另一方面,GUI主線程則可以通過外接的中斷按鍵很好的實現對圖像顯示的控制,例如圖像保存、回放、凍結、參數修改和對前端的FPGA圖像處理設備的控制等。具體實施過程如下。
在整個系統的前端,紅外探測器所采集的紅外圖像數據每一個像素的灰度級都是被量化為14位的,為方便傳輸,在打包傳輸的時候在高位加零擴展為16位,每兩行一個數據包,并且在數據包開頭加上了每個包中第一行數據的行號,所以由FPGA發送過來的每一個UDP數據報的數據長度都是1282((320×2+1)×2)字節。用Qt進行UDP數據報的收發需要用到 QUdpSocket類,它繼承自 QAbstractSocket[8]。這里的 Socket就是所謂的“套接字”,它是不同主機之間進行通信的端點,通過它就能實現網絡上兩臺主機之間的雙向通信。
Qt開辟子線程需要在所建的工程(ProcessImage.pro)中添加一個新的C++類,它的名字可隨意(實驗中命名為“UdpThread”),但是其基類必須是“QThread”且繼承于“QObject”,然后再進入udpthread.h和udpthread.cpp進行編程操作,重新實現UdpThread::run()函數,再在主線程中添加“UdpThread”類的對象“thread”,調用 thread.start()函數來啟動子線程,run()函數其部分代碼如下:


子線程的工作流程圖如圖6所示,子線程來的主要任務就是監聽接收網絡端口的數據,按照主線程所給的指令對圖像數據進行處理和顯示。

圖6 圖像數據接收顯示流程圖Fig.6 Receiving and display flowchart of image data
主線程的主要工作是通過參數的修改和按鍵的作用對子線程工作進行控制,包括圖像的處理、顯示和保存。在我們需要看到目標的灰度圖像或者偽彩色圖像時,我們可以通過按鍵控制子線程改變圖像處理方式,顯示我們想看到的效果,而當我們想保存某一幀圖像時,我們可以凍結圖像的實時顯示,并將當前緩存的圖像以jpeg或者bmp格式存儲至SD卡指定的文件夾,以供其他的應用。具體的實施方式如下:
在GUI主線程的構造函數中的部分代碼如下:

本設計使用的ARM系統板有八個按鍵:K1-K8,打開“dev/buttons”就能獲取每個按鍵的狀態,即每次從它獲取八個按鍵對應的八個字節,每個字節的最低位為1時,表示按鍵被按下,這樣根據不同的按鍵被按下,程序可以做出不同的動作。ProcessImage::buttonclicked()函數部分代碼如下:
memset(buffer,0,sizeof buffer);//初始化按鍵當前狀態緩存

所以,我們想知道第i個按鍵是否被按下時,只需要判斷isOn[i]是不是為1即可,編程時我們設定某個按鍵被按下后就改變響應的參數或發出指令,控制整個系統做出對應的動作。
在我們需要保存圖像時,直接調用保存函數ProcessImage::Savepic()來完成圖像的存儲,其部分代碼如下:

這樣就能夠將我們需要采集的圖像存儲到SD卡中,同時不會影響系統對紅外圖像的實時顯示。主線程和子線程各司其職,相互配合的完成了紅外圖像的實時顯示功能和圖像采集功能,大大的提升了ARM的應用效率。
圖7所示是用抓包軟件Wireshark所檢測到的前端FPGA板所發送的紅外圖像UDP數據包速度。根據設計,所傳圖像的大小為320×240,幀頻為25FPS,每兩行一個數據包,故理論傳輸速率應為120×25=3000 Packets/s,故與圖中顯示的速率符合。整個系統的效果圖如圖8所示,由圖可以看出,這個系統的總體相對較小,在結合合適的結構固定之后能夠很方便的移動。圖9所示為采用文獻[4]所使用的圖像重繪函數PaintEvent()實現圖像的顯示后的效果,該圖大小為640×480,由于該函數在處理圖像時效率不高,每幀圖像處理不及時,在目標晃動時可以明顯看出圖像出現變形,同時有延時和丟幀現象的存在。而在同樣的ARM系統上使用本設計的方法得到的紅外圖像如圖10、11所示,這些圖像同樣是640×480,但是由這些實驗結果圖像可以看出,本設計完全可以實現紅外圖像的實時顯示和圖像保存且效果良好,沒有出現變形、失真和丟幀的現象,這充分的說明了本設計技術的優異性,同時整個設計外形小巧,移動方便,能耗低,在結合蓄電池等設備的輔助下,可在很多復雜的環境下使用。

圖7 數據包發送速率Fig.7 Packet transmission rate

圖8 系統結構圖Fig.8 System structure

圖9 失真圖像Fig.9 Distorted image

圖10 本設計顯示的灰度圖像Fig.10 The gray image displayed in this design

圖11 本設計顯示的彩色圖像Fig.11 The color image displayed in this design
現今,紅外圖像的處理和應用范圍越來越廣,要求也越來越多,本設計通過采用結合Qt多線程編程和FrmageBuffer直接寫屏的方式,在FPGA和ARM系統上高效的實現了紅外圖像的實時傳輸、顯示、處理和采集,效果良好,且方法簡便,技術完全可行,還能夠在此基礎上對紅外圖像進行進一步的開發和應用,同時整個系統體積較小,移動方便靈活,體現出了ARM和FPGA的結合在紅外圖像應用開發上的能力和優勢,拓寬了紅外圖像的應用范圍,具有一定的應用前景。
[1] Liu Hui,Zhao Wenjie,Wu wei.The military application of infrared imaging technology[J].Modern Science and Technology,2010,9(2):80 -82.(in Chinese)劉輝,趙文杰,吳畏.紅外成像技術的軍事應用[J].現代科技,2010,9(2):80 -82.
[2] Wu Hua,Xie Liying,Xu Zeyu.Design and implementation of thermal infrared camera based on ARM9[J].Computer Engineering,2010,36(16):234 -236.(in Chinese)吳華,謝禮瑩,徐澤宇.基于ARM9的紅外熱像儀設計與實現[J].計算機工程,2010,36(16):234 -236.
[3] Li Ling,Pei Hailong.Design of infrared video processing system based on ARM[J].Video Engineering,2011,23(35):157 -160.(in Chinese)李玲,裴海龍.基于ARM的紅外視頻處理系統設計[J].電視技術,2011,23(35):157 -160.
[4] Shi Feng.Research of infrared image processing technology based on linux[D].Beijing:North China University of Technology,2009.(in Chinese)史峰.基于Linux的紅外圖像處理技術研究[D].北京:北方工業大學,2009.
[5] Chen Zhe,Gu Guohua.Data transmission of IR thermal imager based on gigabit ethernet[J].Laser & Infrared,2012,1(42):41 -44.(in Chinese)陳喆,顧國華.基于千兆以太網的紅外熱像儀數據傳輸[J].激光與紅外,2012,1(42):41 -44.
[6] Liu Zhao,Su Li,Jin Depeng,et al.The parallel CRC codec design in the 10G ethernet system[J].Application of Electronic Technique,2004,30(4):47 - 50.(in Chinese)劉昭,蘇厲,金德鵬,等.10G以太網系統中的并行CRC編解碼器的設計[J].電子技術應用,2004,30(4):47-50.
[7] Tan Hua,Wei Lin,Tian Yijun.An achievement on FPGA of CRC -16 encoder with 32 bits parallel data[J].Journal of Hechi University,2008,2(28):74 - 79.(in Chinese)譚華,韋林,田宜君.32位并行數據的CRC-16編碼器的 FPGA 實現[J].河池學院學報,2008,2(28):74-79.
[8] Huo Yafei.Qt creator quick start[M].Beijing:Beihang University Press,2012.(in Chinese)霍亞飛.Qt Creator快速入門[M].北京:北京航空航天大學出版社,2012.