1. 程式人生 > >邊緣檢測演算法原理

邊緣檢測演算法原理

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

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

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

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

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

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

    1、 Roberts運算元 Roberts交叉運算元為梯度幅值計算提供了一種簡單的近似方法: 

      (1) 

    用卷積模板,上式變成: 

     (2) 

   其中Gx和Gy由下面的模板計算: 

     (3) 

    同前面的梯度運算元一樣,差分值將在內插點處計算.Roberts運算元是該點連續梯度的近似值,而不是所預期的點處的近似值.Roberts邊緣檢測器的試驗結果見圖(3) .
   2、 Sobel運算元 正如前面所講,採用3*3鄰域可以避免在畫素之間內插點上計算梯度.考慮一下圖6.2中所示的點周圍點的排列.Sobel運算元也是一種梯度幅值, 

     

(4) 

     其中的偏導數用下式計算: 

     (5) 


    其中常數C=2;
      和其他的梯度運算元一樣,和可用卷積模板來實現: 

    (6) 

    請注意這一運算元把重點放在接近於模板中心的畫素點.圖6.3和圖6.4表明了這一運算元的作用.Sobel運算元是邊緣檢測器中最常用的運算元之一. 
           

  上圖 用於說明Sobel運算元和Prewitt運算元的鄰域畫素點標記 

   3、 Prewitt運算元 ,Prewitt運算元與Sobel運算元的方程完全一樣,只是常量c=1.所以 

     (7) 

  請注意,與Sobel運算元不同,這一運算元沒有把重點放在接近模板中心的畫素點.這種邊緣檢測器的效能也示意在圖6.3和圖6.4中. 

      4、 各種演算法比較 現在來比較一下上面討論過的邊緣檢測器.我們將按照本節開頭所提出的濾波、增強和檢測這三個步驟,來比較各種方法.第四步定位將不討論.首先給出在忽略濾波步驟情況下Roberts、Sobel和Prewitt邊緣檢測方法實驗結果,如圖6.3所示.對濾波後的圖象進行邊緣檢測的結果見圖6.4,其中濾波器為前一章介紹的高斯濾波器,梯度幅值的計算見方程6.3.比較圖6.3和圖6.4可以發現,由於噪聲影響,一些假邊緣也被檢測出來了.


圖 用於邊緣檢測的測試影象 

    (a)原始影象 (b)7x7高斯濾波的影象 



圖  各種邊緣檢測器對未經濾波的影象(a)進行邊緣檢測的比較. 

      (c) Roberts交叉運算元.(d)Sobel運算元.(e) Prewitt運算元. 




圖  各種邊緣檢測器對濾波後的影象(圖6.3 (b))進行邊緣檢測的結果. 

        (a) Roberts交叉運算元.(b)Sobel運算元.(c) Prewitt運算元