圖像處理中常常會聽到盒子濾波(Box Filter)這個概念。A boxfilter is also called a mean filter。也就是說,Box Filter對當前像素及其相鄰的的像素點都一視同仁,統一進行平均處理,這樣就可以濾去圖像中的噪聲。而在實踐中,我們可以用基於模板的卷積操作來實現Box Filter,Box Filter的模板中所有系數都取相同的值。下圖給出了對圖像進行Box Filter的效果以及其所使用的模板。
在MATLAB中,用於實現盒子濾波的主要函數是imboxfilt(),它的調用形式
B = imboxfilt(A, filterSize, Name, Value)
其中,A待處理的圖像,filterSize是所采用模板的尺寸,默認大小為3*3,Name和Value是MATLAB中參數名與參數值對兒(必須成對使用),它有很多具體的取值也可以缺省。例如當Name取值為'Padding'時,對應的Value就表示原圖像的邊界填充方式。因為原圖像四條邊上的像素之鄰域是不完整的。我們無法直接算出邊界上的像素濾波處理后應該是多少。於是我們要先給原圖像加上一個外圈像素,並以此為基礎再來計算原圖中四條邊上像素濾波后的結果。下表給出了Value的可取值類表,其中'replicate'是默認值。
最后我們來看一個例子。假設有下面這樣一個矩陣:
matrix = 1 2 1 4 3 1 2 2 3 4 5 7 6 8 9 5 7 6 8 8 5 6 7 8 9
然后我們利用imboxfilt()函數來對圖
像進行盒子濾波(注意我們將外圈元素填為0):
>> B = imboxfilt(matix,'Padding',0)B = 0.6667 1.0000 1.5556 1.8889 1.5556 2.0000 3.0000 3.8889 4.4444 3.4444 3.0000 4.5556 5.4444 6.0000 4.4444 3.8889 6.0000 7.0000 7.6667 5.5556 2.5556 4.0000 4.6667 5.1111 3.6667
可以人工驗證一下計算的結果:
對於結果矩陣中第一行第一列的元素值 (1+2+1+2+0+0+0+0+0)/9=0.6667
對於結果矩陣中第二行第二列的元素值 (1+2+1+1+2+2+5+7+6)/9=3.0000
當然,在實際圖像處理中,我們常常需要保證結果是一個整數值(因為像素的分為是0~255中的整數),這時可以用round()函數來進行四舍五入(注意我們變換了一個參數值):
>> B = round(imboxfilt(matix,'Padding','replicate'))B = 1 1 2 3 3 3 3 4 4 5 4 5 5 6 7 6 6 7 8 8 5 6 7 8 8
(本文完)