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