趙 倩,潘 虎
(上海電力學(xué)院 電子信息與工程學(xué)院,上海 200090)
圖像在形成、傳輸和掃描等過程中,常因外界噪音干擾導(dǎo)致質(zhì)量下降,影響視覺效果,給進一步處理帶來不便.為抑制噪音,改善圖像質(zhì)量,必須對圖像進行濾波、平滑等預(yù)處理.目前常用的圖像去噪算法有中值濾波,均值濾波,維納濾波.隨著計算機行業(yè)的發(fā)展,PC機上的圖像處理軟件已經(jīng)非常成熟,但圖像處理的最大特點是數(shù)據(jù)量與運算量大,這時用軟件實現(xiàn)會比較慢[1].DSP雖然具備指令流水線和很高的處理速度,但由于其本質(zhì)仍然是依靠串行執(zhí)行指令來完成相應(yīng)的圖像處理算法,其處理速度依然很受限制[2].可編程門陣列(Field Programable Gate Array ,F(xiàn)PGA)[3]保持了ASIC的高速性,避免了開發(fā)的高成本以及在成品后不能改變內(nèi)部電路的缺點,具有強大的數(shù)據(jù)并行處理能力和極高的速度,給數(shù)字信號處理算法開辟了全新的道路[4].
本文主要介紹了維納濾波的原理,比較了十字型和3×3型濾波窗口設(shè)計對濾波效果的影響,分析和優(yōu)化了基于FPGA的維納濾波算法的設(shè)計.
維納濾波器是一種自適應(yīng)濾波器,它比線性濾波器具有更好的選擇性,可以更好地保存圖像的邊緣和高頻細節(jié)信息.該算法通過估計圖像中每個像素的局部均值和方差,以實現(xiàn)圖像的自適應(yīng)去噪,其局部均值與方差分別為:
式中:S——圖像中每個像素的M×N鄰域.
維納濾波估計式為:
式中:δ2——噪音方差,若沒有給出,則自動以所有局部估計方差的均值代替.
本設(shè)計采用Matlab和QuartusII的聯(lián)合測試平臺,利用Matlab產(chǎn)生加噪圖像測試數(shù)據(jù),以16進制的形式保留在txt文件中.圖像維納濾波器設(shè)計包括據(jù)存儲模塊、濾波窗口模塊和濾波算法模塊3個部分.數(shù)據(jù)存儲模塊用來保存圖像測試數(shù)據(jù)或去噪后的圖像數(shù)據(jù),通過txt文件讀入和讀出圖像數(shù)據(jù);濾波窗口模塊是給濾波算法模塊提供運算數(shù)據(jù);而濾波算法模塊主要用于對數(shù)據(jù)進行濾波處理.濾波器算法與測試框圖見圖1.
圖1 濾波器算法與測試示意
濾波窗口模塊主要為濾波算法模塊提供計算數(shù)據(jù),它將數(shù)據(jù)按照要求形成一個矩陣,該矩陣對應(yīng)于圖像中當(dāng)前像素點的一個鄰域.濾波窗口的設(shè)計極其重要,如果濾波窗口發(fā)生錯位,運算像素單元和其鄰域的像素點可能不再是所要求的窗口內(nèi)的像素,從而造成濾波效果不佳,嚴(yán)重時會影響圖像的顯示效果,甚至?xí)l(fā)生扭曲,濾波效果極差.
本文采用兩種濾波窗口模式:一是3×3的窗口[5];二是十字形的濾波窗口[2].兩種濾波窗口結(jié)構(gòu)如圖2所示.
圖2 兩種濾波窗口結(jié)構(gòu)
本文以3×3的窗口為例進行濾波窗口的設(shè)計.利用2個FIFO和6個寄存器對圖像的行、列數(shù)據(jù)進行存儲,設(shè)計的窗口如圖2a所示.圖2a中每個fifo的地址長度為圖像的寬度,即1個fifo存儲1行圖像數(shù)據(jù),用于圖像行數(shù)據(jù)緩存.如果圖像大小為128×256時,fifo的地址長度為256個字節(jié).6個寄存器分3組兩兩串接,實現(xiàn)每行數(shù)據(jù)上列像素的緩存,從而形成一個3×3的窗口.對于128×256大小的圖像數(shù)據(jù)則需要延時256個時鐘周期,以滿足窗口的準(zhǔn)確性,按照一列數(shù)據(jù)從上往下掃描前進,直至完成所有圖像的像素點.圖3給出了窗口在圖像中的運動狀態(tài).
圖3 窗口運動示意
維納濾波算法中,根據(jù)式(1)、式(2)和式(3)計算像素3×3點鄰域的均值和方差,再由鄰域方差、噪音方差和鄰域均值計算出去噪后相應(yīng)像素點的灰度值out.由于方差的計算是根據(jù)像素點的灰度值來確定的,對于一些特殊情況,如當(dāng)鄰域像素點灰度值都接近于零時,鄰域方差就會很低,如圖像噪音方差為400,當(dāng)鄰域方差小于100時,式(3)中后一項的值被放大,故式(3)計算出的b(x,y)的值會發(fā)生很大的偏移,這種現(xiàn)象集中體現(xiàn)在灰度值接近于零的像素鄰域中.方差與所對應(yīng)的像素領(lǐng)域如表1所示.
表1 方差及所對應(yīng)的像素鄰域
由表1可以看出,在數(shù)據(jù)區(qū)域前5列鄰域的像素灰度值都比較低,計算出的鄰域方差值也比較低,去噪效果較差.因此,在求出鄰域方差后,需要對其進行方差修正:如果方差較小,則用接近總體方差的值來替代,這樣可避免極限點的出現(xiàn).經(jīng)過處理后,去噪圖像效果更清晰.圖4為方差修正前后的去噪效果比較.
維納濾波算法代碼如下:
圖4 濾波算法方差修正前后去噪效果對比
維納濾波算法的功能仿真如圖5所示,圖中的a0~a8為當(dāng)前像素點的8個鄰域像素值(3×3窗口),out為當(dāng)前像素點維納去噪后對應(yīng)的灰度值.由圖5可以看出,算法的效果基本實現(xiàn).
圖5 濾波算法的功能仿真
維納濾波在十字窗口和3×3窗口下的濾波效果比較見圖6.從圖6可以看出,對維納濾波而言,十字窗口的濾波效果比3×3窗口的濾波效果差,這是由于在十字窗口中,參與噪音方差估計的像素點較少,難以達到較好的濾波效果.
圖6 維納濾波在十字窗口和3×3窗口下的濾波效果
本文對維納濾波的預(yù)處理算法實現(xiàn)進行了研究,設(shè)計了基于FPGA的圖像維納濾波器,給出了不同濾波窗口設(shè)計的效果對比,并對算法的代碼進行了優(yōu)化和分析,以期為圖像的后續(xù)處理奠定良好的硬件基礎(chǔ).
參考獻文:
[1]方翰華,陳新華,沈國新,等.基于FPGA圖像濾波算法硬件化設(shè)計[J].電子測量技術(shù),2009,32(12):68-71.
[2]朱捷,朱小娟,賀明.基于FPGA的實時圖像中值濾波設(shè)計[J].計算機測量與控制,2007,15(6):798-800.
[3]尚明.FPGA技術(shù)的應(yīng)用與發(fā)展趨勢[J].科技咨詢,2007,14(1):10-12.
[4]葉敏,周文暉,顧偉康.基于FPGA的實時圖像濾波及邊緣檢測方法[J].傳感技術(shù)學(xué)報,2007,20(3):623-627.
[5]胡越黎,計慧杰,吳頻,等.圖像的中值濾波算法及其FPGA實現(xiàn)[J].計算機測量與控制,2008,16(11):1 672-1 675.