1. 程式人生 > >影象處理之空間濾波

影象處理之空間濾波

上圖是一個以(x,y)為中心的3*3鄰域 。

空間濾波是指:鄰域中心從一個畫素向另一個畫素移動,對鄰域中的畫素應用運算元T,並在該位置(領域中心)產生輸出。典型地,該處理從輸入影象的左上角開始,以水平掃描的方式逐畫素處理。當該鄰域的中心位於影象的邊界上時部分鄰域將位於影象外部,此時,用T做計算時可以忽略外側鄰點,或者用0或其他指定的灰度值填充影象的邊緣。

鄰域(典型的是一個較小的矩形)和預定義操作一起稱為空間濾波器。

如果在影象畫素上執行的是線性操作,則濾波器稱為線性空間濾波器,否則稱為非線性空間濾波器。

使用一個m*n的濾波器模板,假設m = 2a + 1且n = 2b + 1,a,b為整數(即指奇數尺寸的濾波器),對大小為M*N的影象進行線性空間濾波,表示為下式:

g(x,y) = \sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x+s,y+t)

其中f(x,y)表示原影象(x,y)處的畫素,g(x,y)表示濾波後(x,y)處的畫素,w(s,t)為濾波器係數。

 相關和卷積

一個大小為m*n的濾波器w(x,y)與一幅影象f(x,y)做相關操作,可表示為:w(x,y)☆f(x,y)

w(x,y)與f(x,y)的卷積表示為w(x,y)\bigstar f(x,y)

w(x,y)\bigstar f(x,y) = \sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x-s,y-t)

等式右側的負號表示翻轉f(即旋轉180°),通常我們是將w旋轉180°而不是f,效果是一樣的。

平滑濾波器

平滑濾波器用於模糊處理和降低噪聲,常用於預處理任務中,例如大目標提取之前去除影象中的一些瑣碎細節。平滑濾波器有線性和非線性之分。

平滑線性濾波器的輸出是包含在濾波器模板鄰域內的畫素的簡單平均值,所以有時也稱為均值濾波器。另外典型的隨機噪聲由灰度級的急劇變化組成,所以平滑處理常用於降噪。需要注意的是,影象邊緣也是由影象灰度尖銳變化帶來的特性,所以均值濾波處理並不希望產生影象邊緣的模糊。

上圖是2個3*3濾波器模板,一個m*n模板有等於1/mn的歸一化常數,上圖的1/9和1/16就是歸一化常數。

所有係數都相等的空間均值濾波器有時稱為盒狀濾波器,如左圖。右圖則產生更為重要的加權平均。賦予中心點最高權重,然後隨著離中心點的距離增加而減小系數值的加權策略是在平滑處理中試圖降低模糊。

加權濾波器濾波過程由下式給出:

g(x,y) = \frac{\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)f(x+s,y+t)}{\sum_{s=-a}^{a}\sum_{t=-b}^{b}w(s,t)}

統計排序濾波器是一種非線性空間濾波器。其中最知名的是中值濾波器,它將畫素鄰域內的中值代替該畫素(鄰域中心)的值。中值濾波器對處理脈衝噪聲(椒鹽噪聲,這種噪聲以黑白點的形式疊加在影象上)非常有效。

銳化空間濾波器基礎

銳化跟模糊可以看成是對應相反的操作,模糊處理中,我們使用均值濾波,均值與積分類似,所以可以猜想,銳化處理可由微分來實現。

影象處理中的一階微分的基本定義:

\frac{\partial f}{\partial x} = f(x+1)-f(x)

對於二維函式f(x,y),沿著兩個空間軸處理偏微分。

二階微分定義如下:

\frac{\partial^{2} f}{\partial x^{2}} = f(x+1)+f(x-1)-2f(x)

一階微分和二階微分的定義見下圖:

影象中的邊緣在灰度上常常類似於斜坡過渡,這就導致影象在一階微分上產生較粗的邊緣,因為沿著斜坡的微分非0。而二階微分產生由0分開的一個畫素寬的雙邊緣。所以二階微分在增強細節方面要比一階微分好得多。

二階微分銳化——拉普拉斯運算元 

各向同性濾波器:這種濾波器的響應與影象 突變方向無關,也就是說,各向同性濾波器是旋轉不變的,即將原影象旋轉後進行濾波處理的結果和先對影象濾波後再旋轉的結果相同。

最簡單的各向同性微分運算元是拉普拉斯運算元,一個二維影象函式f(x,y)的拉普拉斯運算元定義為:

\bigtriangledown^{2}f = \frac{\partial ^{2}f}{\partial x^{2}}+\frac{\partial ^{2}f}{\partial y^{2}}

在x方向上:

\frac{\partial ^{2}f}{\partial x^{2}} = f(x+1,y)+f(x-1,y)-2f(x,y)

在y方向上:

\frac{\partial ^{2}f}{\partial y^{2}} = f(x,y+1)+f(x,y-1)-2f(x,y)

所以:

\bigtriangledown^{2}f(x,y) = f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)

上式可以用下面的濾波模板實現:

這是一個以90°為增量旋轉各向同性的模板。 

類似的,一個以45°為增量的各向同性的模板如下圖:

實踐中,可能有如下圖的模板:

本質上是一樣的,只是在做影象合併時需要注意符號上的差別。具體說來,如果所使用的定義具有負的中心繫數,那麼必須將原影象減去拉普拉斯變換後的影象,如果是正的則加上,從而得到銳化結果。用數學表示為:

g(x,y) = f(x,y)+c[\triangledown ^{2}f(x,y)]

f(x,y)和g(x,y)分別是輸入影象和銳化後的影象,如果使用負的中心繫數,則常數c = -1,如果使用正的中心繫數,則c = 1。

一階微分銳化——梯度

函式f(x,y)在座標(x,y)處的梯度定義:

\triangledown f = grad(f) = \begin{bmatrix} g_{x}\\ g_{y} \end{bmatrix} = \begin{bmatrix} \frac{\partial f}{\partial x}\\ \\ \frac{\partial f}{\partial y} \end{bmatrix}

它指出在(x,y)處f的最大變化率的方向。

\triangledown f的幅度值表示為M(x,y),即:

M(x,y) = \sqrt{g_{x}^{2}+g_{y}^{2}}

M(x,y)是與原影象大小相同的影象,稱為梯度影象(或梯度)。

有時,用絕對值來近似上式,即:

M(x,y) = |g_{x}|+|g_{y}|

上圖中是一個3*3區域內的影象點的灰度,如z_{5}表示f(x,y),z_{1}表示f(x-1,y-1)等。由之前的定義,一階微分可表示為:g_{x} = z_{8}-z_{5},g_{y} = z_{6}-z_{5}。這裡採用一階微分的其他定義(交叉差分):

g_{x} = z_{9}-z_{5},g_{y} = z_{8}-z_{6}

對於以z_{5}為中心的一個3*3鄰域:

g_{x} = \frac{\partial f}{\partial x} = (z_{7}+2z_{8}+z_{9}) - (z_{1}+2z_{2}+z_{3})

g_{y} = \frac{\partial f}{\partial y} = (z_{3}+2z_{6}+z_{9}) - (z_{1}+2z_{4}+z_{7})

這兩個公式可以用下面的模板實現:

這兩個模板稱為Soble運算元。發現模板中的係數總和為0, 表明灰度恆定區域響應為0。

其梯度幅值為:

M(x,y) = |(z_{7}+2z_{8}+z_{9})-(z_{1}+2z_{2}+z_{3})|+|(z_{3}+2z_{6}+z_{9})-(z_{1}+2z_{4}+z_{7})|

梯度處理經常用於工業檢測,輔助人工檢測產品缺陷,或作為自動檢測的預處理,簡化自動檢測的計算任務。如下圖中作為自動檢測的預處理步驟,右側的影象即為Soble模板得到的梯度影象(即M(x,y)):

參考資料:岡薩雷斯《數字影象處理》