基于FPGA的實時紅外圖像放大模塊
紅外成像技術(shù)是目前非常有用的新型高科技,具有極強抗干擾能力,屬于被動式觀測裝備,隱蔽性很強。長波紅外可不受煙霧等的影響,分辨率高。另外,紅外成像不受地面和海面的多徑效應影響,具有多目標全景觀察、追蹤及識別能力,具有很廣闊的應用前景和價值。
本文采用的紅外系統(tǒng)為凱邁廣微160×120系列,由于原始圖像大小為160×120,在某些應用場合其分辨率很難滿足需要,必須對圖像進行放大。
圖像放大是一種常用的數(shù)字圖像處理技術(shù),在日常社會生活的許多領(lǐng)域有著廣泛的應用,因此數(shù)字圖像的放大是圖像處理的基本操作之一。數(shù)字圖像放大多用軟件來實現(xiàn)。但隨著現(xiàn)場可編程門陣列技術(shù)的突飛猛進,F(xiàn)PGA也逐漸進入數(shù)字信號處理領(lǐng)域,尤其在實時圖像處理方面FPGA無可比擬的并行處理能力,所以國內(nèi)外愈來愈多的實時處理應用都轉(zhuǎn)向了FPGA平臺。本文正是介紹了一種基于FPGA的固定倍率紅外圖像放大模塊。
1 圖像放大算法
目前圖像放大處理通常都采用軟件方法來實現(xiàn),雖然其算法種類多樣,且圖像放大后的質(zhì)量也比較高,但是,由于其運算時間往往較長,因此在某些實時性要求較高的數(shù)字圖像處理場合不宜采用軟件方法而適合采用硬件方法。硬件方法實現(xiàn)圖像放大,其處理速度可大大提高,不過,采用硬件實現(xiàn)時,由于資源非常有限,許多處理算法因過于復雜而無法通過硬件實現(xiàn)。目前在進行硬件圖像處理過程中,通常采用插值算法,利用圖像的像素點間存在著的相關(guān)性進行插值而實現(xiàn)圖像的放大。常用的差值算法包括最近鄰域插值法(Nearest Neighbor Interpolation),雙線性插值法(Linear Interpolation),雙三次插值法(Bieubie interpolation)。
1.1 最近鄰域插值法
從計算量的角度來說,最近鄰插值是最簡單的插值。在這種算法下,每個插值輸出像素的值就是在輸入圖像中與其最臨近采樣點的值。算法的數(shù)字表示為:
f(x)-f(xk),1/2(xk-1+xk)
1.2 雙線性插值法
雙線性插值法的輸出像素時它在圖像中2×2鄰域采樣點的平均值,它根據(jù)某個像素周圍4個像素(m,n),(m+l,n),(m,n+1),(m+1,n+1)的灰度值在水平和垂直2個方向?qū)ζ洳逯怠?/P>
設(shè)m
把按照上式計算出來的值賦予圖像的幾何變換對應于處的像素,即可實現(xiàn)雙線性插值。
1.3 雙三次插值法
雙三次插值的插值核為三次函數(shù),其插值鄰域的大小為4×4。它的插值效果比較好但相應計算量也大。
1.4 本文采用的算法
上述3種圖像插值算法中最近鄰插值放大實現(xiàn)最為簡單,處理速度快,但它只是把原始像素簡單的復制到其鄰域內(nèi),放大圖像就會出現(xiàn)明顯的方塊或鋸齒,不能很好地保留原始圖像的邊緣信息。雙三次插值算法的視覺效果最好,但計算復雜開發(fā)周期長,占用的硬件資源較大,不符合本系統(tǒng)的資源要求。使用雙線性插值能夠較好地消除鋸齒,保留原始圖像的邊緣信息,放大后的圖像較平滑,且有較好的視覺效果。本文選取改進型的線性插值(2×1鄰域和1×2鄰域)作為最終實現(xiàn)方案。如圖1所示,實心表示原始像素,空心表示放大后的圖像。本文采用的算法數(shù)學表達式為:
2 算法基于FPGA的設(shè)計與實現(xiàn)
2.1 系統(tǒng)結(jié)構(gòu)
系統(tǒng)總體結(jié)構(gòu)如圖2所示,行插值和數(shù)據(jù)控制模塊控制數(shù)據(jù)存入雙口RAM中,并在存入的過程中實現(xiàn)行的放大,因為采用2×2領(lǐng)域放大,每個目標像素放大所需的原始圖像相鄰2行的2個像素,所以可以將相鄰2行寫入雙口RAM。列插值和數(shù)據(jù)控制模塊實現(xiàn)列放大和把插值后的數(shù)據(jù)送入到下一個模塊。數(shù)據(jù)流向是圖像放大模塊的重點和難點,如何實現(xiàn)實時性,良好的數(shù)據(jù)控制很重要。在數(shù)據(jù)從上一個模塊讀入的同時,行插值模塊就完成了行放大。在一幀圖像的幀頭,行插值模塊對2行數(shù)據(jù)進行操作,在第2行到倒數(shù)第2行,行插值只對單行數(shù)據(jù)進行處理,處理完畢后并通知列插值模塊進行下一步運算。列插值模塊在收到行插值模塊給的信號后,從雙口RAM中讀取已經(jīng)存入的兩行數(shù)據(jù),并完成中間行的插值,在運算的過程中并把RAM中的第一行的數(shù)據(jù)逐個讀出并送到下一個模塊。當完成列插值運算后,立即通知行插值模塊開始讀入新的一行,并在讀入的同時,把新產(chǎn)生的行讀出。行插值模塊完成新的一行讀入后,通知列插值模塊與RAM中上一次存入的第二行(第一次列插值的第3行)進行列插值操作,并重復上述操作,直至完成當前幀。具體流程如圖3所示。
2.2 算法實現(xiàn)
圖像處理模塊的具體實現(xiàn)結(jié)構(gòu)如圖4所示。該模塊由3個部分構(gòu)成:ram_control模塊實現(xiàn)RAM控制和行放大;calculate模塊實現(xiàn)列放大和數(shù)據(jù)輸出;dpram為雙口RAM用于數(shù)據(jù)存儲。
(1)ram_control模塊。D_SYP為2倍的像素時鐘輸入,SYP為像素時鐘,SYL為行同步信號,G_reset為全局復位信號,data_in為數(shù)據(jù)輸入端口,cal_done為列運算完成信號指示,done為行放大完成信號,其余信號為dpram控制信號。
(2)calculate模塊。caleulate模塊與ram_control模塊功類似,再運算完成后可以控制數(shù)據(jù)輸出到下一個功能模塊。
(3)dpram。dpram可以實現(xiàn)不同速率的輸入和輸出,還可以根據(jù)需求改變同一個RAM口的不同速率的輸入和輸出,本文采用了兩路不同的時鐘分別控制ram_a口和ram_b口,同一個口用同樣的時鐘讀入讀出數(shù)據(jù)。
3 系統(tǒng)仿真與實現(xiàn)
圖5為quartus功能仿真結(jié)果,時鐘速率和數(shù)據(jù)輸入均為模擬產(chǎn)生,根據(jù)仿真結(jié)果可以看出,地址發(fā)生器和數(shù)據(jù)輸出均按照設(shè)計要求輸出,理論上可以實現(xiàn)放大功能。
圖6為紅外機芯組件GW160×120所采集到的原始圖像,圖7為采用本文放大算法后采集到的圖像。對比發(fā)現(xiàn)圖像質(zhì)量較好,沒有馬賽克現(xiàn)象,可以滿足觀察需要,達到了設(shè)計要求。
4 結(jié)語
在以后的應用中如果硬件資源滿足需求,可以把雙三次插值應用于紅外機芯系統(tǒng)。由于系統(tǒng)采用了FPGA進行設(shè)計,因此具有很強的擴展性,可以在不改變硬件系統(tǒng)的基礎(chǔ)上進行算法改進,增加了系統(tǒng)的靈活性和適應性。
評論