圖像自適應(yīng)分段線性拉伸算法的FPGA設(shè)計
由于紅外圖像的成像機理以及紅外成像自身的原因,紅外圖像有對比度低、圖像較模糊、噪聲大等特點。因此抑止噪聲,提高圖像信噪比,以及調(diào)整紅外圖像對比度,以利于后續(xù)圖像分析、目標識別或跟蹤,必須對紅外圖像進行增強處理。另外,在其他場合,若采用人機交互方式,則必須對原始圖像進行預(yù)處理,改善圖像視覺效果,使其更適合人機進一步的分析和處理。
圖像增強從作用域出發(fā),分為空間域增強和頻率域增強兩種。頻率域是一種間接增強的方法,由于存在域之間的變換和反變換,計算復(fù)雜,難以滿足實時性要求。自適應(yīng)分段線性拉伸算法是一種空間域圖像增強方法,直接對圖像像素灰度進行操作,由于運算過程簡單、實現(xiàn)方便,目前的圖像增強預(yù)處理電路大多選用這種算法。硬件實現(xiàn)上,最初是采用單片DSP芯片實現(xiàn),其原理為:圖像數(shù)據(jù)實時的傳輸給DSP,DSP接收完1塊數(shù)據(jù)后,再對整塊數(shù)據(jù)進行增強處理,這樣勢必會造成時間的延遲,不能滿足精確制導武器系統(tǒng)實時性的要求。后來硬件結(jié)構(gòu)發(fā)展為采取DSP,F(xiàn)PGA芯片相結(jié)合的方式。這樣,有效結(jié)合了DSP的運算能力強與FPGA邏輯和存儲資源豐富的優(yōu)點;不足之處在于,DSP與FPGA之間的通信給設(shè)計工作增加了額外負擔。與DSP相比,F(xiàn)PGA結(jié)構(gòu)上的優(yōu)勢使得其更適合完成并行處理、及結(jié)構(gòu)性強和高速的運算。本文基于這種算法理論基礎(chǔ),使用xilinx公司規(guī)模較大的XC4VLXl5系列FPGA,實現(xiàn)了紅外圖像的實時處理。
1 自適應(yīng)線性分段線性灰度級拉伸算法
圖像灰度線性拉伸算法表達式為:
式中:i是圖像數(shù)據(jù)行號;j是圖像數(shù)據(jù)列號;Y(i,J)是拉伸后輸出圖像灰度值;X(i,j)是輸入原始圖像灰度值,為14 b二進制數(shù);Xmin是輸入圖像數(shù)據(jù)的最小灰度值;Xmax是輸入圖像數(shù)據(jù)的最大灰度值;Zmax表明輸出圖像的最大灰度值,設(shè)計中拉伸后的圖像灰度值用8 b二進制數(shù)表示,故Zmax=255。
首先對紅外圖像做灰度直方圖統(tǒng)計,低信噪比條件下,選取壓縮因子為5%,將盲元和噪聲的影響降到最低。分別搜索5%最大灰度值中的最小值作為Xmax,5%最小灰度值里的最大值作為Xmin。拉伸轉(zhuǎn)換時,將大于Xmax的像素灰度置為Zmax,小于Xmin的像素灰度置為O。此算法將線性拉伸區(qū)間自適應(yīng)地分為[O,Xmin),[Xmin,Xmax]和(Xmax,255]三個部分。其中,[O,Xmin)和(Xmax,255]兩個灰度區(qū)間的像素灰度分別被壓縮為O和255。若圖像中目標較小,且目標正好位于兩個被壓縮的區(qū)間內(nèi),就有可能被抑制。為避免這種情況發(fā)生,可視情況適當調(diào)整壓縮因子5%的大小。
2 拉伸算法的FPGA實現(xiàn)
2.1 設(shè)計思路
根據(jù)以上算法分析,FPGA設(shè)計思路如下:在每幀圖像幀正程,用雙端口RAM進行直方圖統(tǒng)計,記錄每個像素灰度值出現(xiàn)的次數(shù),幀逆程即可統(tǒng)計得到此幀圖像的Xmin和Xmax。因為相鄰兩幀圖像近似度高,可用前幀得到的Xmin和Xmax來處理下幀圖像。在幀逆程時,調(diào)用除法器計算出的值;在下幀正程時,只需計算Q·[X(i,j)-Xmin],然后將得到的結(jié)果除以64(左移6位),即對每個像素只需1次減法、1次乘法和移位就可完成拉伸運算。實現(xiàn)框圖如圖1所示,拉伸后數(shù)據(jù)的輸出僅比輸入延時62.5 ns,實現(xiàn)了對紅外圖像的實時處理。
2.2 硬件設(shè)計
通過以上設(shè)計思路的分析,設(shè)計主要包括灰度直方圖統(tǒng)計、除法和拉伸運算3部分。下面進行詳細介紹。
2.2.1 雙端口RAM
XC4VLXl5芯片具有豐富的BlockRAM資源,用它構(gòu)成雙端口RAM,進行灰度直方圖統(tǒng)計。像素的灰度值作為雙端口RAM的地址,對應(yīng)空間存儲此灰度值在1幀圖像里的頻數(shù)。以320×256幀大小、灰度值為14 b的紅外圖像為例,在每個像素灰度值都相同的極限情況下,每個地址空間需要的存儲的值為81 920,轉(zhuǎn)換為二進制有17 b,故所需存儲空間大小為17 b×214。對雙端口RAM的操作分為三個階段:
(1)在幀正程時,只需對A端口進行讀/寫操作。根據(jù)接收到的像素灰度值,先讀出RAM中對應(yīng)地址空間的儲值,加“1”后回寫入原來的地址空間,這樣在每幀正程結(jié)束時,就統(tǒng)計完了每個灰度值出現(xiàn)的頻數(shù),即完成了灰度直方圖統(tǒng)計。
(2)幀逆程時,要同時對A,B端口進行讀操作。對于A端口,依次從高地址讀取RAM中的數(shù),將讀取的數(shù)進行累加,當和大于幀像素個數(shù)的5%時,此時對應(yīng)的地址值即為Xmax;類似地對B端口操作,從0地址開始讀RAM,可找到Xmin。將得到的灰度值Xmin和Xmax存入寄存器,作為除法器和下一幀圖像拉伸運算的輸入。
(3)每幀最后將雙端口RAM清零,為下一幀灰度直方圖統(tǒng)計做準備。由于雙端口RAM沒有整體清零功能,設(shè)計中采用從“O”地址開始。依次往高地址寫零的方式清零。
2.2.2 除法器
除法運算通過調(diào)用ISE IP Core Generator生成的15位定點除法器來實現(xiàn),滿足高精度要求,而不采用逼近法。一幀圖像的拉伸只需調(diào)用一次除法器,提高了運算的效率。在幀逆程計算Q:=16 384/(Xmax-Xmin)的值,對于15位輸入,除法器有18個時鐘周期的延時,而這并不會影響圖像處理的實時性。
2.2.3 控制時鐘
在1個像素時鐘周期內(nèi)要完成讀RAM、加法計算和回寫RAM的操作,RAM的控制時鐘至少必須是像素時鐘的4倍??刂茣r鐘的選取還要考慮幀逆程的時間長度,要在逆程里訪問RAM查找到Xmin和Xmax,還要完成RAM清零操作。FPGA系統(tǒng)時鐘為96 MHz,分頻后產(chǎn)生48 MHz,為像素時鐘8倍,用它作為雙端口RAM和除法器的控制時鐘,可滿足要求。
2.2.4 拉伸運算
將式(1)進行簡單變換,可以記為:
Q值在上幀結(jié)束前已經(jīng)得到,根據(jù)式(2)拉伸運算得到簡化,只需1次減法和乘法運算,得到積的小數(shù)點左移6位后,截取低8位就得到拉伸后的灰度值。需要注意的是,截取前要判定乘法是否溢出,如果溢出,結(jié)果置為最大灰度值255。
3 系統(tǒng)驗證
采用飛機高空采集的地面紅外圖像作為驗證模板,灰度拉伸前的原始圖像如圖2所示,整幅圖像對比度低,細節(jié)極不明顯。最大、最小灰度值按5%的比例選取,拉伸后的圖像如圖3所示,拉伸后可明顯看出河流、道路、汽車等地物的輪廓,但圖像中較亮和較暗的部分層次不清晰。若減小灰度值壓縮比例為2%,圖像的主要輪廓變化不明顯,較亮和較暗的部分將會顯現(xiàn)出一定層次,這表明被壓縮的區(qū)間相對變小,按比例拉伸的圖像范圍擴大。分段線性拉伸的結(jié)果可好可壞,分段區(qū)間的選擇是關(guān)鍵,選取時要考慮原始圖像的質(zhì)量。噪聲和盲元數(shù)目較少時,被壓縮的區(qū)間可適當調(diào)小。
該設(shè)計充分利用Virtex-4 FPGA的邏輯資源,實現(xiàn)了紅外圖像的自適應(yīng)分段線性拉伸,對FPGA芯片資源占用情況如表1所示。整個設(shè)計完全在FPGA中實現(xiàn),能最大限度地減少分立元件的使用。降低了系統(tǒng)的整體功耗,設(shè)計周期和開發(fā)成本也就能隨之減少。算法完全采用流水線設(shè)計思路,處理后的數(shù)據(jù)相對輸入延時小于一個像素時鐘周期,最高系統(tǒng)時鐘可達128 MHz。設(shè)計的性能和實時性滿足預(yù)期目標,可用于精確制導武器或?qū)Ш较到y(tǒng)。
4 結(jié)語
這里簡要分析了圖像自適應(yīng)分段線性拉伸算法,利用Xilinx Virtex-4 FPGA豐富的片上資源實現(xiàn)了這一算法。通過實驗對設(shè)計的有效性進行了驗證,圖像對比度有明顯提高,噪聲和盲元被抑制。但該算法具有局限性,僅適用于大目標的圖像增強。在天文學、計算機視覺、動態(tài)景物分析、超聲及聲納圖像處理等領(lǐng)域中廣泛存在著點目標紅外圖像,由于點目標無形狀、尺寸等可利用的信息,處理時須存儲多幀圖像,數(shù)據(jù)處理量大。在做圖像灰度級拉伸時,目標有可能被作為噪聲而抑制掉,從而丟失有用信息,今后需要對點目標紅外圖像的增強方法做進一步研究。