1. 程式人生 > >數字影象處理中的空間濾波

數字影象處理中的空間濾波

影象的空間濾波

空間卷積:

                                           

        卷積是處理線性系統的基礎,以下介紹的濾波計算方式,都與卷積計算有密切關係,其計算形式與卷積的計算方式有高度的相似性。如果下面介紹的濾波運算元作用於影象,就相當於一個空間相關的計算過程(卷積的對稱計算——相關)。

上式中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);      %顯示圖片