王鵬, 曹云峰,*, 許蕾, 丁萌, 張洲宇, 曲金秋
(1. 南京航空航天大學(xué) 航天學(xué)院, 南京 210016; 2. 南京航空航天大學(xué) 民航學(xué)院, 南京 211106)
近年來由于機器視覺的飛速發(fā)展,圖像處理技術(shù)在不同領(lǐng)域下的應(yīng)用也越來越廣泛。通常情況下,工程應(yīng)用中的圖像處理算法需要處理的圖像數(shù)據(jù)很大,處理時間相對較長,因此提高處理速度在實時性要求比較高的應(yīng)用領(lǐng)域是非常必要的。在算法優(yōu)化已經(jīng)無法提高計算速度的前提下,將部分單一、耗時的圖像處理操作用硬件來實現(xiàn)可以有效地提高算法的速度[1-4]。現(xiàn)場可編程邏輯門陣列(Field-Programmable Gate Array,FPGA)具有靈活的開發(fā)方式以及很強的并行性和邏輯性,適用于數(shù)據(jù)量大的簡單圖像處理,但是其不擅長于比較復(fù)雜的算法及邏輯控制,而高端精簡指令集機器 (Advanced RISC Machine,ARM)剛好具有較強的控制能力,能夠協(xié)調(diào)軟硬件的資源分配,控制整個系統(tǒng)的運行[5-8]。
文獻[9]中提出了一種基于ARM+FPGA的交通標志識別系統(tǒng),通過設(shè)計圖像預(yù)處理IP核,結(jié)合Zynq-7000全可編程片上系統(tǒng)(System on Chip,SoC)提出了一個新的硬件平臺,與現(xiàn)有的基于FPGA的解決方案相比,該硬件平臺可以實現(xiàn)高達8倍的速度。文獻[10]中認為方向梯度直方圖(Histogram of Oriented Gradient,HOG)算法是一個計算密集的任務(wù),并在基于Zynq SoC的系統(tǒng)上提出了3種不同的實現(xiàn)方法來加速算法,第1種采用OpenCV在ARM上運行HOG的方法,第2種采用ARM和FPGA協(xié)同實現(xiàn)的方法,第3種僅使用FPGA實現(xiàn)HOG算法,實驗結(jié)果表明采用ARM和FPGA的協(xié)同方法在處理速度和資源利用綜合指標下達到最優(yōu)。因此筆者采用了ARM+FPGA軟硬件協(xié)同的方式來實現(xiàn)無人機跑道檢測算法中圖像預(yù)處理的硬件加速。
本文針對目前主流計算機處理算法成本高、運行效率低的情況,提出了一種低成本、運行效率高的適用于機載的SoC實現(xiàn)方法。針對算法處理中相對耗時的圖像縮放處理進行實驗,提出了一種適用于硬件模塊實現(xiàn)的圖像縮放算法,并設(shè)計縮放算法知識產(chǎn)權(quán)(Intellectual Property,IP)核。采用Xilinx公司的Zynq-7000系列,該系統(tǒng)集成了2 個ARM Cortex A9核,以及最多可達相當(dāng)于500多萬個邏輯門可編程邏輯單元,搭建軟硬件協(xié)同的圖像處理操作系統(tǒng)[11-15],搭載設(shè)計的縮放算法IP核,完成圖像的采集、傳輸、縮放到顯示的過程,達到圖像實時處理的要求。
整個圖像處理系統(tǒng)如圖1所示,系統(tǒng)的核心部分是Xilinx公司的Zynq-7000芯片,該芯片由處理系統(tǒng)(Processing System,PS)和可編程邏輯(Programmable Logic,PL)兩大功能模塊組成。PS和PL之間的接口都是基于總線協(xié)議(Advanced eXtensible Interface,AXI)設(shè)計的,包括高性能總線(High Performance AXI,AXI_HP)和通用總線(General Purpose AXI,AXI_GP)2種,在圖像數(shù)據(jù)流傳輸中,部分使用AXI_HP設(shè)計的接口,提供快速傳輸?shù)墓δ埽诳刂撇糠质褂肁XI_GP總線設(shè)計的接口。圖像采集部分使用的是OV7670圖像傳感器, 它具有體積小,工作電壓低的特點,可以通過串行攝像機控制總線協(xié)議(Serial Camera Control Bus,SCCB)控制輸入整幀、取窗口等方式的各種分辨率8位影像數(shù)據(jù)[9-12]。圖像采集模塊控制攝像頭采集圖像數(shù)據(jù),并將數(shù)據(jù)傳入到圖像處理IP核中進行處理,處理后的數(shù)據(jù)送入數(shù)據(jù)搬運器(Datamover)中,通過Datamover可以實現(xiàn)數(shù)據(jù)從PL到雙倍速率同步動態(tài)隨機存儲器(DoubleDataRate,DDR)的搬運,也可以實現(xiàn)數(shù)據(jù)從DDR到 PL的傳送,對一些硬件無法實現(xiàn)的復(fù)雜圖像處理運算,可以將數(shù)據(jù)傳送到PS端進行處理,通過Datamover傳送數(shù)據(jù)可以減少中央處理器(Central Processing Unit,CPU)的利用率,加速平臺處理的速度,通過顯示器顯示處理后的圖像。系統(tǒng)的硬件結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)硬件結(jié)構(gòu)示意圖Fig.1 Schematic diagram of system hardware structure
傳統(tǒng)的圖像縮放大多是采用插值算法來實現(xiàn)的,主要包括最鄰近插值、雙線性插值和雙三次插值算法。由于需要用硬件實現(xiàn)圖像縮放,考慮到FPGA內(nèi)的邏輯資源有限,而算法越復(fù)雜設(shè)計時占用的邏輯資源就越多,完成一幅圖像縮放所用的時間就越長,影響算法的實時性,因此,筆者在基于無人機自主著陸的跑道檢測算法中,考慮在滿足縮放精度并且簡化算法的情況下,設(shè)計了一種適用于FPGA硬件實現(xiàn)的圖像縮放算法。很多航空電子嵌入式圖像處理系統(tǒng)是由固定的圖像采集源和顯示設(shè)備組成,系統(tǒng)中的縮放倍率是固定的,因此根據(jù)通用跑道檢測算法中顯著性區(qū)域提取時將輸入圖像縮小0.25倍來進行設(shè)計,大大減小了算法的復(fù)雜性和硬件開發(fā)的難度。
由于考慮將圖像以0.25進行縮小,該算法的核心思路是選擇一個4×4的像素塊求取區(qū)域內(nèi)每個像素點對中心點的影響系數(shù),將該16個點的影響集中在一個點上,實現(xiàn)圖像的縮小,輸入像素和輸出像素的映射關(guān)系見圖2(a)。
圖2 求取輸出點示意圖Fig.2 Schematic diagram of output point solving
在計算過程中,先選取行像素點求取中心點,這里以圖2(a)中的第2行為例,根據(jù)A、B、C、D距離中心點的距離來確定影響系數(shù)并求取中心點E,如式(1)所示:
(1)
同理可得E′、e、e′。再分別根據(jù)每行獲取的中心點求取列中心點O,即4×4區(qū)域的中心點,見圖2(c)和式(2)。
(2)
分別將求取每行中心點獲得的等式代入式(2),即可求得每個點對輸出點的影響系數(shù),見式(3):
(3)
式中:?a為像素點a對輸出像素點的影響系數(shù),以此類推。用4×4的像素區(qū)域遍歷輸入圖像,通過固定的系數(shù)處理該像素區(qū)域即可獲得縮小后的圖像,因此本文設(shè)計的縮放算法在結(jié)構(gòu)上得到了簡化,可以更方便地在FPGA中用硬件邏輯語言實現(xiàn)。
算法結(jié)構(gòu)在簡化后,其性能的好壞需要和傳統(tǒng)縮放算法作對比,因此,筆者根據(jù)本文設(shè)計的圖像縮放算法編寫MATLAB測試程序,并且和傳統(tǒng)的最鄰近插值、雙線性插值和雙三次插值算法分別作對比,從縮放后的效果圖、運算時間等2個方面作對比。輸入圖像是用飛行模擬器(FlightGear)模擬獲得的無人機著陸時的跑道圖片,圖3是3種傳統(tǒng)算法和本文提出的算法處理效果對比圖。
從圖3中可以看到,將輸入圖像按同等倍數(shù)縮小時,4幅圖像都保持了原有圖像的基本特征,但是最鄰近插值處理后的圖像比較粗糙,有較明顯的鋸齒,而后3種圖像處理后的效果比較平滑。在圖像清晰度上,本文算法的處理效果相對于雙線性插值和雙三次插值更清晰。
除此之外,引入定量分析的指標對實驗結(jié)果進行評估,采用文獻[16]中的將圖像縮小后再放大到同一分辨率,再利用絕對誤差均值(Mean Absolute Error,MAE)、均方誤差(Mean Squared Error,MSE)、峰值信噪比(Peak Signal to Noise Ratio,PSNR)以及信噪比(Signal Noise Ratio,SNR)對縮放效果進行評估。MAE、MSE、PSNR、SNR的計算公式分別為
(4)
(5)
(6)
(7)
式中:M和N分別為輸入二維圖像的行數(shù)和列數(shù);g(i,j)和f(i,j)分別為橫坐標為i、縱坐標為j下的輸入圖像和輸出圖像像素值。當(dāng)MAE、MSE的值越小,PSNR、SNR的值越大,圖像的處理效果越好,質(zhì)量越高。采用這4個指標的客觀比較結(jié)果如表1。
圖3 不同算法處理效果圖Fig.3 Processing effect diagram of different algorithms
從表1中可以看到,評價指標中MAE是最小的,MSE和雙三次插值法同時最小,PSNR和SNR都是最大的,所以定量分析的結(jié)果是本文提出的算法相較于其他3種算法處理效果更好。4種算法處理的時間見表2。
從表2中可以看到,因為最鄰近插值法的算法結(jié)構(gòu)最簡單,所以它的耗時最少,而雙三次插值的耗時最多。在實際應(yīng)用中,當(dāng)基于無人機視覺算法的跑道跟蹤過程中需要處理大量圖片時,縮放環(huán)節(jié)節(jié)約的總時間是非??捎^的。
因此,綜合考慮算法的處理效果和運算時間,在該縮放應(yīng)用處理中,本文提出的算法具有更大的優(yōu)勢,并且由于其結(jié)構(gòu)簡單,更利于使用FPGA的硬件邏輯編寫實現(xiàn)進一步加速。
表1 定量分析對比Table 1 Comparison of quantitative analysis
表2 4種算法的MATLAB運行時間對比Table 2 Comparison of MATLAB running time among four algorithms
縮放IP核的開發(fā)軟件使用的是Xilinx公司的VIVADO設(shè)計套件,并用Verilog HDL(Hardware Description Language)進行硬件邏輯的編寫。縮放圖像中輸入點對輸出點的影響系數(shù)可以合并為以下3個:0.015 625、0.046 875、0.140 625。在硬件實現(xiàn)的時候為了提高處理速度,盡量避免浮點數(shù)運算,又要同時保持數(shù)據(jù)的精度,通常采用去尾法來處理浮點數(shù),這3個系數(shù)可以寫成式(8)的形式:
(8)
因此在硬件邏輯轉(zhuǎn)化時將參數(shù)擴大26倍轉(zhuǎn)換為整數(shù)運算,在二進制運算中即向左移6位,所以參數(shù)選用1、3、9,分別用二進制表示為4′b0001、4′b0011、4′b1001,最后獲取處理后的數(shù)據(jù)時舍棄后6位數(shù)據(jù)即可。每個圖像區(qū)域處理塊中包含16個像素點,用4位計數(shù)器進行計數(shù),根據(jù)計數(shù)器的數(shù)值對應(yīng)像素塊中點的相對位置,利用case語句選取對應(yīng)參數(shù),將輸入數(shù)據(jù)依次乘上對應(yīng)參數(shù),并分別存入存儲器中,進行累加。
圖像縮放模塊的仿真時序圖如圖4所示,為了方便觀察和計算,測試仿真時輸入一個16列、8行的像素矩陣塊,前4行全部輸入測試像素2,后4行全部輸入測試像素6,縮放后的結(jié)果應(yīng)為一個4列、2行的像素塊,像素值依次為2、2、2、2、6、6、6、6,見圖4仿真波形中的small_data。
將使用Verilog HDL編寫的圖像縮放IP核例化封裝并加入到工程的IP核庫中,在模塊設(shè)計的時候添加該IP核即可完成調(diào)用。
圖4 圖像縮放模塊仿真波形Fig.4 Simulation waveform of image scaling module
圖5中只展示了系統(tǒng)部分關(guān)鍵模塊圖,包括設(shè)計的圖像縮放IP核、ARM處理器模塊、攝像頭讀取模塊以及視頻圖形陣列 (Video Graphics Array,VGA)顯示模塊。
系統(tǒng)測試的主要器材包括一個Zynq-7000開發(fā)板、OV7670攝像頭和VGA顯示器。利用FlightGear飛行模擬器獲得無人機著陸過程的視頻,用一臺筆記本播放該視頻,通過攝像頭獲取無人機著陸的圖像信息,并在VGA中實時顯示處理后的結(jié)果。實驗設(shè)備和實驗結(jié)果見圖6。
圖5 系統(tǒng)部分模塊圖Fig.5 Part of module diagram of system
圖6(b)中VGA顯示器中顯示了兩部分圖片,一部分是輸入的原圖像,一部分是左上角顯示的處理后的縮小圖片。通過串口助手獲取攝像頭采集到的輸入圖像以及經(jīng)過IP核處理后的圖像數(shù)據(jù)。在MATLAB中將攝像頭捕捉到的輸入圖像用本文提出的縮放算法處理,并和硬件IP核處理后的圖片作對比,處理時間見表3,SoC的處理速度比MATLAB快了171倍,基本實現(xiàn)了0延時。
MATLAB和SoC處理后的灰度直方圖分別如圖7(a)、(b)所示,2幅圖的像素點分布基本一致,處理后圖像對應(yīng)位置像素點的差值絕對值最大為0.003 7,最小為0。由此可見,利用SoC進行圖像縮放模塊的設(shè)計,不僅運行速度大大提升,處理精度也非常高。
圖7 MATLAB和SoC處理后直方圖對比Fig.7 Histogram contrast after MATLAB and SoC processing
1) 本文采用了FPGA+ARM的SoC軟硬件處理平臺,綜合了FPGA和ARM的優(yōu)點,具有并行處理的能力和分系統(tǒng)控制能力,應(yīng)用于圖像處理中能夠加速算法的處理速度。
2) 針對無人機自主著陸視覺算法中的圖像縮放處理,提出了一種適用于硬件加速的圖像縮放算法,在處理速度上僅次于結(jié)構(gòu)簡單的最鄰近插值法,且處理效果最優(yōu)。
3) 利用硬件描述語言實現(xiàn)本文的縮放算法,并封裝成硬件IP核,在圖像處理系統(tǒng)中的處理速度相較于軟件實現(xiàn)提升了171倍,且處理后的像素誤差最大值為0.003 7。
4) 整個系統(tǒng)采用了ARM作為中央控制器協(xié)調(diào)各IP核工作,具有很強的通用性,可以通過增減IP核來改進系統(tǒng),適用于進一步的研究,以及圖像處理IP核的設(shè)計。