1. 程式人生 > >計算機視覺、影象處理中常見的濾波操作

計算機視覺、影象處理中常見的濾波操作

        影象濾波既可以在實域進行,也可以在頻域進行。影象濾波可以更改或者增強影象。通過濾波,可以強調一些特徵或者去除影象中一些不需要的部分。濾波是一個鄰域操作運算元,利用給定畫素周圍的畫素的值決定此畫素的最終的輸出值。(個人認為《LearningImage Processing with OpenCV》中這一段寫的很好:Image filtering is a process to modify or enhance images.Emphasizing certain features or removing others in an image are examples ofimage filtering. Filtering is a neighborhood operation. The neighborhood is aset of pixels around a selected one. Image filtering determines the outputvalue of a certain pixel located at a position (x,y) by performing someoperations with the values of the pixels in its neighborhood.)

影象濾波可以通過公式:


1.      均值濾波(normalized box filter):用其畫素點周圍畫素的平均值代替元畫素值,在濾除噪聲的同時也會濾掉影象的邊緣資訊。在OpenCV中,可以使用boxFilter和blur函式進行均值濾波。均值濾波的核為:

2.      高斯濾波(Gaussian filter):高斯濾波為最常用的濾波器,具有可分離性質,可以把二維高斯運算轉換為一維高斯運算,其本質上為一個低通濾波器。在OpenCV中可通過函式GaussianBlur進行操作。


3.      中值濾波(median filter):中值濾波用測試畫素周圍鄰域畫素集中的中值代替原畫素。中值濾波去除椒鹽噪聲和斑塊噪聲時,效果非常明顯。在OpenCV中,可以使用函式

medianBlur進行操作。

4.      雙邊濾波(bilateral filter):雙邊濾波在平滑影象時能夠很好的保留邊緣特性,但是其運算速度比較慢。在OpenCV中,可以使用函式bilateralFilter進行操作。

除了平滑去噪,影象銳化,求邊緣等也是常見的影象濾波應用。這類濾波器常常使用一節或者二階差分(或微分,對於數字影象而言,其為離散訊號,長用差分代替導數)核算子對影象進行濾波。一節差分常用於求取影象邊緣。二階差分常用於影象增強。常用的這類運算元包括:

1.      Sobel operator:Sobel運算元通過計算水平和垂直方向上的一節差分來進行計算。在OpenCV函式中,可通過使用

Sobel函式進行計算。

    

2.      Laplacian operator:Laplacian運算元通過計算二階差分(微分)來進行計算。在OpenCV函式中,可通過使用Laplacian函式進行計算。


除了上面列舉的較為經典的濾波器(或者說是核算子)外,在OpenCV中也可以自己定義自己的濾波器,然後使用filter2D函式進行運算。

對於以上在實域進行濾波的濾波器來說,邊界問題是一個不得不考慮的事情。通常有以下幾種辦法來進行處理:

   

(black)          (wrap around)          (copy edge)   (reflectacross edge)

除了在實域進行濾波之外,在頻域也可以進行濾波。傅立葉變換儲存每個頻率對於的幅度和相位資訊,其中幅度表示在某個特定的頻率訊號有多少訊號。相位則表示訊號的空間資訊,主要指方向資訊。

在頻域中濾波主要就是設計相應的低通、高通或者帶通等濾波器以實現保留某些頻率,濾除其餘頻率的目的。此外在實域中的卷積運算可以放到頻域中做乘積運算,可以降低運算複雜度。