常見的空間域濾波的方法有很多,市面上的圖像處理軟件也可以進行圖像的濾波,如PS中的銳化、模糊等功能都屬于濾波原理的應用。但市場中常見的PS等圖像處理軟件可調節參數較少,不能滿足部分用戶需求,QT的界面設計使得開發帶界面的軟件更為方便,且可用C++語言編寫,運行效率高,執行速度快,適合圖像處理。
1數字圖像的空間濾波原理
空間域濾波是圖像處理的一種常見的方法。一般是對圖像的像素進行處理的,因此成為空間域濾波。數字圖像的空間濾波處理過程可以理解為一個矩陣變換,由公式(1)定義:
(1)
公式(1)中r是處理前的圖像矩陣,存儲的是處理前圖像像素的亮度值,s是處理后的圖像矩陣,存儲的是處理后圖像像素的亮度值,T是空間濾波的操作,一般是用一個類似圖1的模板對圖像的每個像素進行處理,模板的中心就是被處理像素的位置。進行處理的時候需要注意圖像的邊界問題,因為在處理邊界像素的時候模板的一部分下面是沒有對應像素點的。
1.1中值濾波
中值濾波比較簡單,主要是計算濾波模板初中心點外的其他所有點的像素的亮度值的中位數,作為濾波后圖像濾波模板中心點的像素值。經過這樣的處理后一般也可以去除噪聲。
1.2均值濾波
均值濾波器是用于圖像平滑的一種線性濾波器,他用模板內除中心點外的其他點的像素的亮度平均值來代替中心點的像素的亮度,這樣就可以使圖像“尖銳”的部分變得平滑。也正是這個特性,均值濾波一般可以用來做降噪處理,因為一般的噪聲像素的邊緣變化都非常的“尖銳”,經過均值濾波后一般可以去除掉噪聲。
2程序設計步驟
程序是基于QT設計的,使用C++編程語言,所以設計過程包括界面設計和程序設計思路。
2.1 程序界面設計
程序需要用戶輸入數據,故設計用戶數據接口即可。
2.2 程序流程設計
程序設計的實現過程為:
(1)讀取BMP文件的文件頭、信息頭、顏色表、像素點數據等位圖數據。
(2)實現均值濾波的功能。關鍵代碼和注釋為:
//對圖像進行均值濾波
intm,n;
floatsum_weight,sum_coefficient=0.0f;
intdistance=(plate_height-1)/2;//濾波模板中心到邊界的距離,本實驗中plate_width和plate_height相等,且都是奇數
//求濾波模板的系數和
for(m=0;m for(n=0;n { sum_coefficient=sum_coefficient+coefficient_array[m][n]; } //對像素點作均值濾波,本實驗將濾波模板中心的移動范圍限制在距離圖像邊緣distance個像素處 for(inti=distance;i for(intj=distance;j { //每次循環前,將加權和置零 sum_weight=0.0f; //求加權和 for(m=0-(plate_height-1)/2;m<=(plate_height-1)/2;m++) for(n=0-(plate_width-1)/2;n<=(plate_width-1)/2;n++) { sum_weight=sum_weight+coefficient_array[distance+m][distance+n]*data[i+m][j+n]; } dataav[i][j]=(BYTE)(sum_weight/sum_coefficient+0.5);//求均值濾波的結果,并四舍五入 } (3)實現中值濾波的功能。這一步的關鍵代碼和注釋為: //以每個點位中心,將周圍25點存入數組并排序,將中值存入新數據數組datere for(inti=(N3-1)/2;i<(Bitmapinfoheader.biHeight-(N3-1)/2);i++) for(intj=(N3-1)/2;j<(Bitmapinfoheader.biWidth-(N3-1)/2);j++) { for(intp=0;p { paixu[p]=data[i+p/N3-(N3-1)/2][j+p%N3-(N3-1)/2];//每個點周圍的25個點 } std::sort(paixu,paixu+N3*N3); datare[i][j]=paixu[(N3*N3+1)/2]; } (4)將處理后的數據存入到新文件。 結論 圖像的空間濾波中,均值濾波的模板越大,模糊化程度越嚴重,中值濾波對于去除椒鹽噪聲非常有效,而高斯濾波平均周圍點數據的同時突出了中心點,避免了均值濾波模糊化嚴重的缺點。 (作者單位:北京郵電大學)