邊緣檢測

邊緣檢測:

         在視覺計算理論框架中,抽取二維圖像上的邊緣、角點、紋理等基本特徵,是整個系統框架中的第一步。這些特徵所組成的圖稱爲基元圖。
         在不同“尺度”意義下的邊緣點,在一定條件下包含了原圖像的全部信息。
定義:
目前,具有對邊緣的描述性定義,即兩個具有不同灰度的均勻圖像區域的邊界,即邊界反映局部的灰度變化。
局部邊緣是圖像中局部灰度級以簡單(即單調)的方式作極快變換的小區域。這種局部變化可用一定窗口運算的邊緣檢測算子來檢測。

邊緣的描述:
1) 邊緣法線方向——在某點灰度變化最劇烈的方向,與邊緣方向垂直;
2) 邊緣方向——與邊緣法線方向垂直,是目標邊界的切線方向;
3) 邊緣強度——沿邊緣法線方向圖像局部的變化強度的量度。
 


        邊緣檢測的基本思想是通過檢測每個像素和其鄰域的狀態,以決定該像素是否位於一個物體的邊界上。如果一個像素位於一個物體的邊界上,則其鄰域像素的灰度值的變化就比較大。假如可以應用某種算法檢測出這種變化並進行量化表示,那麼就可以確定物體的邊界。

 邊緣檢測算法有如下四個步驟:

濾波:邊緣檢測算法主要是基於圖像強度的一階和二階導數,但導數的計算對噪聲很敏感,因此必須使用濾波器來改善與噪聲有關的邊緣檢測器的性能.需要指出,大多數濾波器在降低噪聲的同時也導致了邊緣強度的損失,因此,增強邊緣和降低噪聲之間需要折衷.

增強:增強邊緣的基礎是確定圖像各點鄰域強度的變化值.增強算法可以將鄰域(或局部)強度值有顯著變化的點突顯出來.邊緣增強一般是通過計算梯度幅值來完成的.

檢測:在圖像中有許多點的梯度幅值比較大,而這些點在特定的應用領域中並不都是邊緣,所以應該用某種方法來確定哪些點是邊緣點.最簡單的邊緣檢測判據是梯度幅值閾值判據.

定位:如果某一應用場合要求確定邊緣位置,則邊緣的位置可在子像素分辨率上來估計,邊緣的方位也可以被估計出來.

    在邊緣檢測算法中,前三個步驟用得十分普遍。這是因爲大多數場合下,僅僅需要邊緣檢測器指出邊緣出現在圖像某一像素點的附近,而沒有必要指出邊緣的精確位置或方向.邊緣檢測誤差通常是指邊緣誤分類誤差,即把假邊緣判別成邊緣而保留,而把真邊緣判別成假邊緣而去掉.邊緣估計誤差是用概率統計模型來描述邊緣的位置和方向誤差的.我們將邊緣檢測誤差和邊緣估計誤差區分開,是因爲它們的計算方法完全不同,其誤差模型也完全不同.


邊緣檢測的三個共性準則:
•好的檢測結果,或者說對邊緣的誤測率儘可能低,就是在圖像邊緣出現的地方檢測結果中不應該沒有;另一方面不要出現虛假的邊緣;
•對邊緣的定位要準確,也就是我們標記出的邊緣位置要和圖像上真正邊緣的中心位置充分接近;
•對同一邊緣要有儘可能低的響應次數,也就是檢測響應最好是單像素的。

幾種常用的邊緣檢測算子主要有Roberts邊緣檢測算子,Sobel算子、Prewitt算子、Krisch邊緣算子,高斯-拉普拉斯算子。
邊緣大致可以分爲兩種,一種是階躍狀邊緣,邊緣兩邊像素的灰度值明顯不同;另一種爲屋頂狀邊緣,邊緣處於灰度值由小到大再到小的變化轉折點處。
邊緣檢測的主要工具是邊緣檢測模板。我們以一個一維模板爲例來考察邊緣檢測模板是如何作用的。假設有一個模板基於Roberts算子的邊緣檢測 和一幅圖象基於Roberts算子的邊緣檢測

可以看出,圖象中左邊暗,右邊亮,中間存在着一條明顯的邊緣,是一個典型階躍狀邊緣。使用模板基於Roberts算子的邊緣檢測 進行模板操作後,結果如下

基於Roberts算子的邊緣檢測

可以看出,邊緣檢測後的圖象在原圖象暗亮邊緣處的灰度值高很多。觀察時,就能發現一條很明顯的亮邊,其他區域都很暗,這樣就起到了邊緣檢測的作用。
模板的作用是將右鄰點的灰度值減去左鄰點的灰度值作爲該點的灰度值。在灰度相近的區域內,這麼做的結果使得該點的灰度值接近於0;而在邊緣附近,灰度值有明顯的跳變,這麼做的結果使得該點的灰度值很大,這樣就出現了上面的結果。這種模板就是一種邊緣檢測器,它在數學上的涵義是一種基於梯度的濾波器,習慣上又稱邊緣算子。我們知道,梯度是有方向的,和邊緣的方向總是垂直的。模板是水平方向的,而上面那幅圖象的邊緣恰好是垂直方向的,使用模板就可以將它檢測出來。如果圖象的邊緣是水平方向的,我們可以用梯度是垂直
方向的模板基於Roberts算子的邊緣檢測 檢測它的邊緣。如果圖象的邊緣是45。方向的,我們可以用模板基於Roberts算子的邊緣檢測 檢測它的邊緣。

常用的邊緣檢測模板有Laplacian算子、Roberts算子、Sobel算子、log(Laplacian-Gauss)算子、Kirsch算子和Prewitt算子等。

 

二.Roberts算子

 

如果我們沿如下圖方向角度求其交叉方向的偏導數,則得到Roberts於1963年提出的交叉算子邊緣檢測方法。該方法最大優點是計算量小,速度快。但該方法由於是採用偶數模板,如下圖所示,所求的(x,y)點處梯度幅度值,其實是圖中交叉點處的值,從而導致在圖像(x,y)點所求的梯度幅度值偏移了半個像素(見下圖)。

 邊緣檢測

邊緣檢測 

Roberts算子的推導:

 
Sobel算子

Sobel算子也有兩個,一個是檢測水平邊緣的模板基於Sobel算子的邊緣檢測 ,另一個是檢測水平邊緣的模板基於Sobel算子的邊緣檢測 。與Prewitt算子相比,Sobel算子對於象素位置的影響作了加權,因此效果更好。

sobel算子的另一種形式是各向同性Sobel算子,也有兩個模板組成,一個是檢測水平邊緣的基於Sobel算子的邊緣檢測 ,另一個是檢測垂直邊緣的 基於Sobel算子的邊緣檢測。各向同性Sobel算子和普通Sobel算子相比,位置加權係數更爲準確,在檢測不同方向的邊緣時梯度的幅度一致。

Sobel算子的推導:

Prewitt算子

Prewitt算子由兩部分組成,檢測水平邊緣的模板

基於prewitt算子的邊緣檢測 和基於prewitt算子的邊緣檢測檢測垂直邊緣的模板

prewitt算子一個方向求微分,一個方向求平均,所以對噪聲相對不敏感。

 

laplacian算子

Laplacian算子定義爲

基於Laplacian算子的邊緣檢測

它的差分形式爲
基於Laplacian算子的邊緣檢測


表示成模板的形式就是 基於Laplacian算子的邊緣檢測。Laplacian算子另外一種形式是 基於Laplacian算子的邊緣檢測,也經常使用。Laplace算子是一種各向同性算子,在只關心邊緣的位置而不考慮其周圍的象素灰度差值時比較合適。Laplace算子對孤立象素的響應要比對邊緣或線的響應要更強烈,因此只適用於無噪聲圖象。存在噪聲情況下,使用Laplacian算子檢測邊緣之前需要先進行低通濾波。
canny算子????

1. Canny邊緣檢測基本原理

     (1)圖象邊緣檢測必須滿足兩個條件:一能有效地抑制噪聲;二必須儘量精確確定邊緣的位置。

     (2)根據對信噪比與定位乘積進行測度,得到最優化逼近算子。這就是Canny邊緣檢測算子。

     (3)類似與MarrLoG)邊緣檢測方法,也屬於先平滑後求導數的方法。

2. Canny邊緣檢測算法

     step1:用高斯濾波器平滑圖象

     step2:用一階偏導的有限差分來計算梯度的幅值和方向

     step3:對梯度幅值進行非極大值抑制

     step4:用雙閾值算法檢測和連接邊緣

step1:高斯平滑函數

邊緣檢測

Step2:一階微分卷積模板

邊緣檢測

step3:非極大值抑制

      僅僅得到全局的梯度並不足以確定邊緣,因此爲確定邊緣,必須保留局部梯度最大的點,而抑制非極大值。(non-maxima suppression,NMS

解決方法:利用梯度的方向。

邊緣檢測

 

1非極大值抑制

四個扇區的標號爲03,對應3*3鄰域的四種可能組合。在每一點上,鄰域的中心象素M與沿着梯度線的兩個象素相比????。如果M的梯度值不比沿梯度線的兩個相鄰象素梯度值大,則令M=0

即: 邊緣檢測

 Step4:閾值化

       減少假邊緣段數量的典型方法是對N[ij]使用一個閾值。將低於閾值的所有值賦零值。但問題是如何選取閾值?

       解決方法:雙閾值算法。雙閾值算法對非極大值抑制圖象作用兩個閾值τ1τ2,且2τ1≈τ2,從而可以得到兩個閾值邊緣圖象N1i,j]和N2ij]。由於N2ij]使用高閾值得到,因而含有很少的假邊緣,但有間斷(不閉合)。雙閾值法要在N2ij]中把邊緣連接成輪廓,當到達輪廓的端點時,該算法就在N1i,j]的8鄰點位置尋找可以連接到輪廓上的邊緣,這樣,算法不斷地在      N1i,j]中收集邊緣,直到將N2i,j]連接起來爲止。

3. canny算法程序實現

   Canny算法程序中將上述的4個步驟再加以細分,分成以下7步:

生成高斯濾波係數;

用生成的高斯濾波係數對原圖像進行平滑;

求濾波後圖像的梯度;

進行非最大抑制;

統計圖像的直方圖,對閾值進行判定;

利用函數尋找邊界起點;

根據6執行的結果,從一個像素點開始搜索,搜索以該像素點爲邊界起點的一條邊界的一條邊界的所有邊界點

同圖像灰度不同,邊界處一般會有明顯的邊緣,利用此特徵可以分割圖像。需要說明的是:邊緣和物體間的邊界並不等同,邊緣指的是圖像中像素的值有突變的地方,而物體間的邊界指的是現實場景中的存在於物體之間的邊界。有可能有邊緣的地方並非邊界,也有可能邊界的地方並無邊緣,因爲現實世界中的物體是三維的,而圖像只具有二維信息,從三維到二維的投影成像不可避免的會丟失一部分信息;另外,成像過程中的光照和噪聲也是不可避免的重要因素。正是因爲這些原因,基於邊緣的圖像分割仍然是當前圖像研究中的世界級難題,目前研究者正在試圖在邊緣提取中加入高層的語義信息。

在實際的圖像分割中,往往只用到一階和二階導數,雖然,原理上,可以用更高階的導數,但是,因爲噪聲的影響,在純粹二階的導數操作中就會出現對噪聲的敏感現象,三階以上的導數信息往往失去了應用價值。二階導數還可以說明灰度突變的類型。在有些情況下,如灰度變化均勻的圖像,只利用一階導數可能找不到邊界,此時二階導數就能提供很有用的信息。二階導數對噪聲也比較敏感,解決的方法是先對圖像進行平滑濾波,消除部分噪聲,再進行邊緣檢測。不過,利用二階導數信息的算法是基於過零檢測的,因此得到的邊緣點數比較少,有利於後繼的處理和識別工作。

各種算子的存在就是對這種導數分割原理進行的實例化計算,是爲了在計算過程中直接使用的一種計算單位;

 

Roberts算子:邊緣定位準,但是對噪聲敏感。適用於邊緣明顯且噪聲較少的圖像分割。Roberts邊緣檢測算子是一種利用局部差分算子尋找邊緣的算子,Robert算子圖像處理後結果邊緣不是很平滑。經分析,由於Robert算子通常會在圖像邊緣附近的區域內產生較寬的響應,故採用上述算子檢測的邊緣圖像常需做細化處理,邊緣定位的精度不是很高

Prewitt算子:對噪聲有抑制作用,抑制噪聲的原理是通過像素平均,但是像素平均相當於對圖像的低通濾波所以Prewitt算子對邊緣的定位不如Roberts算子。

Sobel算子Sobel算子和Prewitt算子都是加權平均,但是Sobel算子認爲,鄰域的像素對當前像素產生的影響不是等價的,所以距離不同的像素具有不同的權值,對算子結果產生的影響也不同。一般來說,距離越遠,產生的影響越小。

Isotropic Sobel算子:加權平均算子,權值反比於鄰點與中心點的距離,當沿不同方向檢測邊緣時梯度幅度一致,就是通常所說的各向同性。

在邊沿檢測中,常用的一種模板是Sobel 算子。Sobel 算子有兩個,一個是檢測水平邊沿的;另一個是檢測垂直平邊沿的 。Sobel算子另一種形式是各向同性Sobel(Isotropic Sobel)算子,也有兩個,一個是檢測水平邊沿的 ,另一個是檢測垂直平邊沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加權係數更爲準確,在檢測不同方向的邊沿時梯度的幅度一致。由於建築物圖像的特殊性,我們可以發現,處理該類型圖像輪廓時,並不需要對梯度方向進行運算,所以程序並沒有給出各向同性Sobel算子的處理方法。
   
 由於Sobel算子是濾波算子的形式,用於提取邊緣,可以利用快速卷積函數,簡單有效,因此應用廣泛。美中不足的是,Sobel算子並沒有將圖像的主體與背景嚴格地區分開來,換言之就是Sobel算子沒有基於圖像灰度進行處理,由於Sobel算子沒有嚴格地模擬人的視覺生理特徵,所以提取的圖像輪廓有時並不能令人滿意。  在觀測一幅圖像的時候,我們往往首先注意的是圖像與背景不同的部分,正是這個部分將主體突出顯示,基於該理論,我們可以給出閾值化輪廓提取算法,該算法已在數學上證明當像素點滿足正態分佈時所求解是最優的。

上面的算子是利用一階導數的信息,屬於梯度算子範疇。

Laplacian算子:這是二階微分算子。其具有各向同性,即與座標軸方向無關,座標軸旋轉後梯度結果不變。但是,其對噪聲比較敏感,所以,圖像一般先經過平滑處理,因爲平滑處理也是用模板進行的,所以,通常的分割算法都是把Laplacian算子和平滑算子結合起來生成一個新的模板。

Laplacian算子一般不以其原始形式用於邊緣檢測,因爲其作爲一個二階導數,Laplacian算子對噪聲具有無法接受的敏感性;同時其幅值產生算邊緣,這是複雜的分割不希望有的結果;最後Laplacian算子不能檢測邊緣的方向;所以Laplacian在分割中所起的作用包括:(1)利用它的零交叉性質進行邊緣定位;(2)確定一個像素是在一條邊緣暗的一面還是亮的一面;一般使用的是高斯型拉普拉斯算子(Laplacian of a Gaussian,LoG),由於二階導數是線性運算,利用LoG卷積一幅圖像與首先使用高斯型平滑函數卷積改圖像,然後計算所得結果的拉普拉斯是一樣的。所以在LoG公式中使用高斯函數的目的就是對圖像進行平滑處理,使用Laplacian算子的目的是提供一幅用零交叉確定邊緣位置的圖像;圖像的平滑處理減少了噪聲的影響並且它的主要作用還是抵消由Laplacian算子的二階導數引起的逐漸增加的噪聲影響。

 

微分算子在圖像處理中扮演重要的角色,其算法實現簡單,而且邊緣檢測的效果又較好,因此這些基本的微分算子是學習圖像處理過程中的必備方法,下面着重討論幾種常見的微分算子。

1.Sobel

 其主要用於邊緣檢測,在技術上它是以離散型的差分算子,用來運算圖像亮度函數的梯度的近似值,缺點是Sobel算子並沒有將圖像的主題與背景嚴格地區分開來,換言之就是Sobel算子並沒有基於圖像灰度進行處理,由於Sobel算子並沒有嚴格地模擬人的視覺生理特徵,所以提取的圖像輪廓有時並不能令人滿意,算法具體實現很簡單,就是3*3的兩個不同方向上的模板運算,這裏不再寫出。

2.Robert算子

根據任一相互垂直方向上的差分都用來估計梯度,Robert算子採用對角方向相鄰像素只差

3.Prewitt算子

   該算子與Sobel算子類似,只是權值有所變化,但兩者實現起來功能還是有差距的,據經驗得知Sobel要比Prewitt更能準確檢測圖像邊緣。

4.Laplacian算子

   拉普拉斯算子是一種二階微分算子,若只考慮邊緣點的位置而不考慮周圍的灰度差時可用該算子進行檢測。對於階躍狀邊緣,其二階導數在邊緣點出現零交叉,並且邊緣點兩旁的像素的二階導數異號。

5.Canny算子

該算子功能比前面幾種都要好,但是它實現起來較爲麻煩,Canny算子是一個具有濾波,增強,檢測的多階段的優化算子,在進行處理前,Canny算子先利用高斯平滑濾波器來平滑圖像以除去噪聲,Canny分割算法採用一階偏導的有限差分來計算梯度幅值和方向,在處理過程中,Canny算子還將經過一個非極大值抑制的過程,最後Canny算子還採用兩個閾值來連接邊緣。

下面算法是基於的算法不可能直接運行,只是我把Canny的具體實現步驟寫了出來,若需用還要自己寫。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章