數字影象處理中的空間濾波
影象的空間濾波
空間卷積:
卷積是處理線性系統的基礎,以下介紹的濾波計算方式,都與卷積計算有密切關係,其計算形式與卷積的計算方式有高度的相似性。如果下面介紹的濾波運算元作用於影象,就相當於一個空間相關的計算過程(卷積的對稱計算——相關)。
上式中w(x,y)是一個濾波核(運算元),不同的濾波方式就是由不同運算元w控制的,如平均值濾波就是通過下面這個核實現的:
利用該運算元作用於影象中的每個畫素,可以得到以該畫素鄰域的平均值為該點畫素值的結果,從而實現影象的平滑濾波。需要注意的是,在影象的邊緣處,由於邊緣畫素點沒有完整的鄰域,所以以該畫素所擁有的鄰域為變數求平均值,即要注意在邊緣不是乘以1/9,而是根據具體用到的畫素個數來決定。
通過改變運算元w(x,y)的尺寸,可以控制以不同大小的鄰域來濾波,如上面給出的例子是3階鄰域,可設定w(x,y)的尺寸為(3,5)、(5,5)、(7,11)等,因為某一點鄰域尺寸必定是奇數,所以設定的運算元也只能是奇數階。
上述給出的只是最簡單的平均值濾波,對應的還有其他運算元,如:
中值濾波 |
4鄰域拉普拉斯運算元 |
8鄰域拉普拉斯運算元 |
中值濾波:將鄰域的值進行排序,選取中值作為該畫素的值,這種濾波對椒鹽噪聲的濾波很有效果,如下圖,中值濾波可以很好的去除椒鹽噪聲。
椒鹽噪聲圖 |
均值濾波 |
中值濾波 |
拉普拉斯運算元:
可以產生影象增強的效果,相比來說8鄰域的拉普拉斯運算元增強效果更好。
月球原圖 |
4鄰拉普拉斯作用 |
8鄰拉普拉斯作用 |
MATLAB實現方式:
函式使用格式g = imfilter(I, w, filtering_mode, boundary_option, size_option);
其中I是輸入影象,w是運算元,後面三個引數選項見下表
選項 |
描述 |
filtering_mode ‘corr’ ‘conv’ boundary_option P ‘replicate’ ‘Symmetric’ ‘circular’ size_option ‘full’ ‘same’ |
濾波通過使用相關來完成,該值預設 濾波通過使用卷積來完成 輸入的影象邊界通過P值擴充套件,P的預設值為0,不需要加‘’ 通過複製外邊界的值來擴充套件 通過映象反射邊界來擴充套件 通過將影象看成是一個二維周期函式的一個週期來擴充套件 輸出影象大小與擴充套件後的大小相同 輸出原影象大小,預設值 |
注:boundary_option %解決運算元在影象邊界的計算問題,通過擴充套件影象來解決。
例子:
I = imread(‘1.jpg’); %讀取當前工作路徑上一張名為1的jpg格式圖片
I = imresize(I, 0.5); %縮小圖片尺寸,減少計算量,可不用這一步
w = ones(11) /11^2; %建立濾波運算元,記得要除以整個運算元的總和
F1 = imfilter(I, w); %對影象進行濾波,會有黑邊
F2 = imfilter(I, w, ‘replicate’); %通過複製擴充套件邊界,可解決黑邊問題
figure, imshow(I), figure, imshow(F1), figure, imshow(F2); %顯示圖片