圖像特徵提取總結

綜述

底層次的特徵是不需要任何形狀信息(空間關係的信息)就可以從圖像中自動提取的特徵,這樣看來,閾值方法就是作爲點處理的一種低層次特徵提取方式,所有低層次方法都可以作爲高層次特徵提取的預處理,從而在圖像中找到形狀。

邊緣檢測相當於漫畫家的草稿,瞭解頻域將有利於分析低層次特徵提取

角點檢測,原理上是檢測線條上曲率突變的點,是一種局部特徵檢測

所以低層次的特徵提取包括以下部分:

  • 一階邊緣檢測
  • 二階邊緣檢測
  • 相位一致性
  • 局部特徵檢測
  • 光流估計

一階邊緣檢測原理

基於邊緣檢測的特點是不易受整體光照強度變化的影響,許多圖像理解都以邊緣爲基礎,邊緣檢測強調的是圖像對比度(contrast),檢測對比度,即亮度上的差別,邊緣就是亮度發生突變的地方。

圖像邊界發生亮度級的階梯變化,邊緣是階梯變化的位置,一階微分可以使階梯變化增強,而當信號沒有變化時,一階微分不響應。

一階邊緣檢測算子是具有方向依賴性的,即水平邊緣檢測算子在水平方向上的差分(差分模擬微分)爲0,形成水平相鄰像素的插值,可以用於檢測垂直邊緣而不能檢測水平邊緣。

水平邊緣檢測算子用於檢測垂直邊緣:

Ex(x,y) = |Px,y - Px+1, y|

注意這個地方沒有歧義,如上圖所示,水平邊緣檢測算子檢測到的是垂直方向上的邊緣。

相應的,爲檢測水平邊緣,需要設計垂直邊緣檢測算子:

Ey(x,y) = |Px,y - Px, y+1|

將兩個算子相結合,即可得到同時檢測水平邊緣和垂直邊緣的算子:

Ex,y = |2*Px,y - Px+1, y - Px, y+1|

下圖是卷積模板,這個算子的實現很簡單,這裏給出僞代碼。

2 -1
-1 0
edge(pix) 
    newpic = zeros(pic)

    for x : 0...rows(pic)-2
            for y : 0...cols(pic)-2
                newpic(x,y) = |2*pic(x,y) - pic(x,y+1) - pic(x+1,y)|
    return newpic

利用邊緣檢測算子後,經常使用使用均勻閾值方法選取最亮點,得到連續的邊緣線,閾值的選取決定最亮點的數量,閾值越大選取得到的點越少,閾值的選取可以憑經驗,也可以由邊緣數據自動的選取

一階差分算子

由泰勒展開式可得以下兩式:

f(x + \triangle x) = f(x) + \triangle x*f{}'(x) + \triangle x^2 / 2 * f{}''(x) + O(\triangle x^3)

f{}'(x) = \frac{f(x+\triangle x)-f(x))}{\triangle x} - O(\triangle x)

由此可得,相鄰兩點的差值是一階導數的估算值,O(\triangle x)決定了估算誤差,減小誤差的一個辦法是:在相鄰的像素間插入一個新的像素來實現。

f{}'(x) = \frac{f(x+\triangle x)-f(x-\triangle x))}{2\triangle x} - O(\triangle x^2)

\triangle x < 1的情況下,差分模擬微分的誤差大大減小,改進的一階差分模板就如下所示:

改進的一階差分模板

水平邊緣檢測模板檢測出中心位置的垂直邊緣, 垂直邊緣檢測模板檢測出中心位置的水平邊緣!

Robert算子

Robert交叉算子(Robert,1965)是最早期的邊緣檢測算子,利用兩個模板,計算對角線上的差值,這兩個模板分別是M+和M-。

Robert交叉算子模板

實現過程中,利用這些模板卷積得到的最大值作爲邊緣存儲值,邊緣點Ex,y是在圖像點Px,y對這兩個模板進行卷積得到的兩個最大值中的較大者。

Robert交叉算子檢測到的邊緣結果如圖所示。

Prewitt算子

Prewitt邊緣檢測算子,類似於微分處理算子,由於它檢測的是變化,必然對噪聲及圖像亮度的階梯式變化有所響應,(模擬頻域高通濾波器)。是對一階邊緣檢測算子的擴展(將一階差分模板進行擴展):

Prewitt算子給出兩個結果,沿x、y兩個座標軸的亮度變化率,兩個向量的和就是該點的邊緣向量,向量包括強度和方向:

Gx和Gy的符號可以用於確定邊緣方向的相應象限。 

prewitt算子的實現僞代碼如下:

Prewitt_x(pic) = - \sum pic(0,y) + \sum(2,y)

Prewitt_y(pic) = - \sum pic(x,0) + \sum(x,2)

我們把Pewitt算子應用於正方形圖像[參見圖(a)],就可以得到邊緣強度和方向,分別如圖(b)和圖(d)所示,其中(d)中沒有包括邊界點,只有執行點的邊緣方向。圖(d)所示的邊緣方向顯示的是度數,其中0°和360°表示水平方向,朝右方向,而90°表示垂直方向,朝上方向。

由於該算子的均值處理特性,雖然邊緣點的區域較寬,但邊緣數據比前面介紹的一階算子更清晰,使亮度變化明顯的區域得到加強。邊緣方向以圖像方式表示顯得不太清晰,利用的向量方式表示更好,如圖(c)所示。利用向量方式,正方形角點處的邊緣方向數據顯然無法很好表示(由於一階導數在這些點不連續)。 

Sobel算子(索貝爾算子)

Sobel邊緣檢測算子是Prewitt檢測算子的擴展,在中心像素位置取權重2,由向量方式確定邊緣的兩個掩碼mask組成的,Sobel算子曾長期是最受歡迎的邊緣檢測算子,比Prewitt算子的檢測性能好(最明顯的優點是抑制噪聲的性能)。

如圖所示,Sobel 邊緣檢測算子也是分兩個方向的,分別計算偏x方向的梯度分量Gx,偏y方向的梯度分量Gy,求絕對值,壓縮到 [0, 255]區間,然後合併梯度G(x, y) = Gx + Gy,就是sobel邊緣檢測後的圖像了。 將Sobel算子的邊緣檢測實現劃分爲五個步驟:

(1) 計算Gx與Gy與模板每行的卷積。

(2) 兩個3x3矩陣的卷積即將每一行每一列對應相乘然後相加。

(3) 求得3*3模板運算後的Gx、Gy。

(4) 求Gx^2 + Gy^2的平方根或者直接對Gx和Gy取絕對值後求和。

(5)設置一個閾值,運算後的像素值大於該閾值輸出爲全1,小於該閾值輸出爲全0。

順便提一下5階Sobel模板(不常用):

基於Sobel算子的邊緣檢測效果:

Canny算子

Canny算子是在Sobel算子的基礎上進行優化的,有三個主要目標:

無附加響應的最優檢測(減少噪聲響應)

通過最優化平滑處理來實現,最常用的是高斯濾波(Canny認爲)。高斯濾波可能會將邊緣放大(區域變寬)。

邊緣檢測位置和實際邊緣位置之間距離最小的正確定位

即邊緣檢測的正確性,可以通過非極大值抑制(相當於峯值檢測)來實現,非極大值抑制只返回項脊出的點,其他的點會被抑制掉。這其實是一種細化處理:返回的是正確位置上的邊緣點連成的更細的邊緣線,儘量使邊緣的寬度變成1個像素,這個像素在梯度方向上的梯度值是最大的。

具體的做法:如果一個點兩側的梯度小於該點上的梯度,那麼它就是極大值,所以我們需要先得到邊緣法線上的梯度值。

減少單邊緣的多重響應而得到單響應。

限制單個邊緣點對於亮度變化的定位。

Canny算子的計算步驟如下:

  1. 高斯濾波器平滑圖像,去除噪聲
  2. 一階差分偏導計算梯度值和方向,通過Sobel算子實現。
  3. 對梯度值不是極大值的地方進行抑制,把不是極值的點,全部置0,去掉了大部分弱的邊緣,所以圖像邊緣會變細。
  4. 用雙閾值連接圖上的聯通點,設置雙閾值 t1, t2, t1 <= t2 大於 t2 的點肯定是邊緣;小於 t1 的點肯定不是邊緣;在 t1, t2 之間的點,通過已確定的邊緣點,發起8領域方向的搜索(廣搜),圖中可達的是邊緣,不可達的點不是邊緣。最後得出 canny 邊緣圖。


拉普拉斯算子
 

邊緣檢測算子的比較

選取特定的邊緣檢測算子取決於應用本身,許多應用並不要求複雜的高級算子。

所有邊緣檢測算子的結果都是用滯後閾值處理來實現的,爲了更好的反映性能,閾值都是手動選擇的,基礎的一階算子對噪聲的響應非常好()。

 

發佈了134 篇原創文章 · 獲贊 34 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章