基于FPGA的實(shí)時(shí)紅外圖像放大模塊
紅外成像技術(shù)是目前非常有用的新型高科技,具有極強抗干擾能力,屬于被動(dòng)式觀(guān)測裝備,隱蔽性很強。長(cháng)波紅外可不受煙霧等的影響,分辨率高。另外,紅外成像不受地面和海面的多徑效應影響,具有多目標全景觀(guān)察、追蹤及識別能力,具有很廣闊的應用前景和價(jià)值。
本文采用的紅外系統為凱邁廣微160×120系列,由于原始圖像大小為160×120,在某些應用場(chǎng)合其分辨率很難滿(mǎn)足需要,必須對圖像進(jìn)行放大。
圖像放大是一種常用的數字圖像處理技術(shù),在日常社會(huì )生活的許多領(lǐng)域有著(zhù)廣泛的應用,因此數字圖像的放大是圖像處理的基本操作之一。數字圖像放大多用軟件來(lái)實(shí)現。但隨著(zhù)現場(chǎng)可編程門(mén)陣列技術(shù)的突飛猛進(jìn),FPGA也逐漸進(jìn)入數字信號處理領(lǐng)域,尤其在實(shí)時(shí)圖像處理方面FPGA無(wú)可比擬的并行處理能力,所以國內外愈來(lái)愈多的實(shí)時(shí)處理應用都轉向了FPGA平臺。本文正是介紹了一種基于FPGA的固定倍率紅外圖像放大模塊。
1 圖像放大算法
目前圖像放大處理通常都采用軟件方法來(lái)實(shí)現,雖然其算法種類(lèi)多樣,且圖像放大后的質(zhì)量也比較高,但是,由于其運算時(shí)間往往較長(cháng),因此在某些實(shí)時(shí)性要求較高的數字圖像處理場(chǎng)合不宜采用軟件方法而適合采用硬件方法。硬件方法實(shí)現圖像放大,其處理速度可大大提高,不過(guò),采用硬件實(shí)現時(shí),由于資源非常有限,許多處理算法因過(guò)于復雜而無(wú)法通過(guò)硬件實(shí)現。目前在進(jìn)行硬件圖像處理過(guò)程中,通常采用插值算法,利用圖像的像素點(diǎn)間存在著(zhù)的相關(guān)性進(jìn)行插值而實(shí)現圖像的放大。常用的差值算法包括最近鄰域插值法(Nearest Neighbor Interpolation),雙線(xiàn)性插值法(Linear Interpolation),雙三次插值法(Bieubie interpolation)。
1.1 最近鄰域插值法
從計算量的角度來(lái)說(shuō),最近鄰插值是最簡(jiǎn)單的插值。在這種算法下,每個(gè)插值輸出像素的值就是在輸入圖像中與其最臨近采樣點(diǎn)的值。算法的數字表示為:
f(x)-f(xk),1/2(xk-1+xk)
1.2 雙線(xiàn)性插值法
雙線(xiàn)性插值法的輸出像素時(shí)它在圖像中2×2鄰域采樣點(diǎn)的平均值,它根據某個(gè)像素周?chē)?個(gè)像素(m,n),(m+l,n),(m,n+1),(m+1,n+1)的灰度值在水平和垂直2個(gè)方向對其插值。
設m

把按照上式計算出來(lái)的值賦予圖像的幾何變換對應于處的像素,即可實(shí)現雙線(xiàn)性插值。
1.3 雙三次插值法
雙三次插值的插值核為三次函數,其插值鄰域的大小為4×4。它的插值效果比較好但相應計算量也大。
1.4 本文采用的算法
上述3種圖像插值算法中最近鄰插值放大實(shí)現最為簡(jiǎn)單,處理速度快,但它只是把原始像素簡(jiǎn)單的復制到其鄰域內,放大圖像就會(huì )出現明顯的方塊或鋸齒,不能很好地保留原始圖像的邊緣信息。雙三次插值算法的視覺(jué)效果最好,但計算復雜開(kāi)發(fā)周期長(cháng),占用的硬件資源較大,不符合本系統的資源要求。使用雙線(xiàn)性插值能夠較好地消除鋸齒,保留原始圖像的邊緣信息,放大后的圖像較平滑,且有較好的視覺(jué)效果。本文選取改進(jìn)型的線(xiàn)性插值(2×1鄰域和1×2鄰域)作為最終實(shí)現方案。如圖1所示,實(shí)心表示原始像素,空心表示放大后的圖像。本文采用的算法數學(xué)表達式為:
2 算法基于FPGA的設計與實(shí)現
2.1 系統結構
系統總體結構如圖2所示,行插值和數據控制模塊控制數據存入雙口RAM中,并在存入的過(guò)程中實(shí)現行的放大,因為采用2×2領(lǐng)域放大,每個(gè)目標像素放大所需的原始圖像相鄰2行的2個(gè)像素,所以可以將相鄰2行寫(xiě)入雙口RAM。列插值和數據控制模塊實(shí)現列放大和把插值后的數據送入到下一個(gè)模塊。數據流向是圖像放大模塊的重點(diǎn)和難點(diǎn),如何實(shí)現實(shí)時(shí)性,良好的數據控制很重要。在數據從上一個(gè)模塊讀入的同時(shí),行插值模塊就完成了行放大。在一幀圖像的幀頭,行插值模塊對2行數據進(jìn)行操作,在第2行到倒數第2行,行插值只對單行數據進(jìn)行處理,處理完畢后并通知列插值模塊進(jìn)行下一步運算。列插值模塊在收到行插值模塊給的信號后,從雙口RAM中讀取已經(jīng)存入的兩行數據,并完成中間行的插值,在運算的過(guò)程中并把RAM中的第一行的數據逐個(gè)讀出并送到下一個(gè)模塊。當完成列插值運算后,立即通知行插值模塊開(kāi)始讀入新的一行,并在讀入的同時(shí),把新產(chǎn)生的行讀出。行插值模塊完成新的一行讀入后,通知列插值模塊與RAM中上一次存入的第二行(第一次列插值的第3行)進(jìn)行列插值操作,并重復上述操作,直至完成當前幀。具體流程如圖3所示。
2.2 算法實(shí)現
圖像處理模塊的具體實(shí)現結構如圖4所示。該模塊由3個(gè)部分構成:ram_control模塊實(shí)現RAM控制和行放大;calculate模塊實(shí)現列放大和數據輸出;dpram為雙口RAM用于數據存儲。
(1)ram_control模塊。D_SYP為2倍的像素時(shí)鐘輸入,SYP為像素時(shí)鐘,SYL為行同步信號,G_reset為全局復位信號,data_in為數據輸入端口,cal_done為列運算完成信號指示,done為行放大完成信號,其余信號為dpram控制信號。
(2)calculate模塊。caleulate模塊與ram_control模塊功類(lèi)似,再運算完成后可以控制數據輸出到下一個(gè)功能模塊。
(3)dpram。dpram可以實(shí)現不同速率的輸入和輸出,還可以根據需求改變同一個(gè)RAM口的不同速率的輸入和輸出,本文采用了兩路不同的時(shí)鐘分別控制ram_a口和ram_b口,同一個(gè)口用同樣的時(shí)鐘讀入讀出數據。
3 系統仿真與實(shí)現
圖5為quartus功能仿真結果,時(shí)鐘速率和數據輸入均為模擬產(chǎn)生,根據仿真結果可以看出,地址發(fā)生器和數據輸出均按照設計要求輸出,理論上可以實(shí)現放大功能。
圖6為紅外機芯組件GW160×120所采集到的原始圖像,圖7為采用本文放大算法后采集到的圖像。對比發(fā)現圖像質(zhì)量較好,沒(méi)有馬賽克現象,可以滿(mǎn)足觀(guān)察需要,達到了設計要求。
4 結語(yǔ)
在以后的應用中如果硬件資源滿(mǎn)足需求,可以把雙三次插值應用于紅外機芯系統。由于系統采用了FPGA進(jìn)行設計,因此具有很強的擴展性,可以在不改變硬件系統的基礎上進(jìn)行算法改進(jìn),增加了系統的靈活性和適應性。
評論