0 引言
現(xiàn)代圖像處理系統(tǒng)對實時性的要求愈來愈高,但圖像的前端采集往往會受器件或環(huán)境影響而使獲得的圖像含有噪聲,因而需要在對圖像處理前進行去噪聲處理。若使用通用的軟件方法,由于處理過程需要進行大量的簡單計算,因此會消耗不少時間而影響系統(tǒng)的實時性。隨著現(xiàn)代電子技術(shù)的發(fā)展,用FPGA來完成中值濾波這類運算簡單但數(shù)據(jù)量巨大的處理,無疑是一種理想的選擇。
1 中值濾波的原理和快速算法
1.1 中值濾波原理
中值濾波是一種非線性空域濾波方法。它是可以有效抑制圖像噪聲,提高圖像信噪比的非線性濾波技術(shù)。中值濾波首先對鄰域點的灰度進行排序,然后選擇中間值作為輸出灰度值。與均值濾波器和其他線性濾波器相比,中值濾波可以很好的濾除脈沖噪聲(Impulsive Noise)和椒鹽噪聲(Salt and Pepper Noise)。同時能夠很好的保護圖像邊緣輪廓的細節(jié)。
中值濾波的公式如下:
![]() |
其中,g(x,y),f(x,y)為像素灰度值,S為模板窗口。
中值濾波的過程一般為:
(1)選擇一個(2n+1) (2n+1)的窗口(一般是3×3或者5×5),使窗口沿圖像數(shù)據(jù)的行方向和列方向從左至右、從上至下沿每個像素滑動。
(2)每次滑動后,對窗口內(nèi)的像素灰度進行排序,并用中間值代替窗口中心位置的像素灰度值。
1.2 快速中值濾波算法
中值濾波算法的核心是快速求出中間灰度值。傳統(tǒng)的排序法如冒泡法,運算量巨大。而用硬件實現(xiàn)不僅要消耗大量的資源,而且運算速度很慢,難以滿足圖像系統(tǒng)處理的實時性要求。本文針對大小為3×3的窗口采用了一種快速排序算法,可以在很大程度上減少運算量,且易于用較少的硬件資源實現(xiàn)。
圖1所示是一個3×3窗口內(nèi)的像素排列方式,該窗口將窗口內(nèi)的各個像素點從左至右,從上至下依次定義為D11、D12、D13、D21、D22、D23、D31、D32、D33。
![]() |
處理時,先分別對每一行的數(shù)據(jù)進行排序,以得到每一行的最大值、中間值和最小值。其中第一行得到的最大值為:Max1=max {D11,D12,D13};
中間值為:Med1=med{D11,D12,D13};
最小值為:Min1=min {D11,D12,D13};
同樣,也可得到第二行的三個值Max2,Med2,Min2和第三行的三個值Max3,Med3,Min3。
由于在上述這九個數(shù)中,三個最大值中的最大值一定是九個像素值的最大值。同理,三個最小值中的最小值一定是九個像素值中的最小值。三個中值中的最大值至少大于五個像素值;即本行的最小值和其他兩行中的中值及最小值。而三個中值中的最小值至少小于五個像素值;即本行的最大值和其他兩行的中值和最小值。所以,比較三個最大值中的最小值Min_of_max、三個中值中的中間值Med_of_med以及三個最小值中的最大值Max_of_min,所得到的中間值就是最終的濾波結(jié)果Meddata。其具體過程如下;
![]() |
雖然,與傳統(tǒng)的排序方法相比,這種方法的比較次數(shù)大大減少。因為求出中值只用了19次比較運算,因而十分方便在FPGA上進行并行處理。
2 圖像預(yù)處理系統(tǒng)和中值濾波器的設(shè)計
2.1 圖像預(yù)處理系統(tǒng)設(shè)計
對圖像的預(yù)處理,一般應(yīng)在前端采集之后立即進行。圖2給出了一個圖像預(yù)處理系統(tǒng)的系統(tǒng)設(shè)計框圖。
圖2中,圖像數(shù)據(jù)經(jīng)前端設(shè)備采集并經(jīng)過A/D轉(zhuǎn)化后,可存人雙口RAM中的一端。然后在選擇控制模塊的控制下將雙口RAM中的幀數(shù)據(jù)提供給中值濾波模塊,同時在雙口RAM的另一端存人另一幀圖像數(shù)據(jù)。接著將中值濾波處理后的圖像數(shù)據(jù)存入SDRAM中,以供后續(xù)的進一步處理。雙口RAM的容量只要可以存儲兩幀圖像數(shù)據(jù)即可。
![]() |
2.2 3×3窗口模塊
中值濾波作為圖像預(yù)處理的一部分,其實時性是一個關(guān)鍵的要求。它要求濾波器能快速、連續(xù)的處理圖像數(shù)據(jù)。中值濾波的第一個問題是要準確獲得3×3窗口中的圖像灰度數(shù)據(jù)。圖3給出了該濾波器的設(shè)計框圖。
圖3中的濾波器用到了兩個FIFO。這種設(shè)計可采用QuartusII中的Megacore實現(xiàn)。設(shè)計長度為一行數(shù)據(jù)(即256)。系統(tǒng)開始工作后,先對FIFO2寫第一行圖像數(shù)據(jù),寫滿后再對FIFO1寫第二行圖像數(shù)據(jù),直到FIFO1也寫滿。在此期間,F(xiàn)IFO1和FIFO2只寫不讀。當完成兩行數(shù)據(jù)的寫人后,將數(shù)據(jù)輸入端和FIFO1、FIFO2如圖2所示進行連接,此時的FIFO1和FIFO2只讀不寫,待三個時鐘周期后,將FIFO1和FIFO2設(shè)為既讀又寫。這樣,在寄存器輸出端和兩個FIFO的輸出端即可獲得第一個3×3模板中的圖像灰度數(shù)據(jù)。此后,隨著圖像數(shù)據(jù)的輸人,模板也沿著圖像從左至右、從上至下移動。









