1. 程式人生 > >邊緣特徵提取方法

邊緣特徵提取方法

               

邊緣檢測是圖形影象處理、計算機視覺和機器視覺中的一個基本工具,通常用於特徵提取和特徵檢測,旨在檢測一張數字影象中有明顯變化的邊緣或者不連續的區域,在一維空間中,類似的操作被稱作步長檢測(step detection)。邊緣是一幅影象中不同屈原之間的邊界線,通常一個邊緣影象是一個二值影象。邊緣檢測的目的是捕捉亮度急劇變化的區域,而這些區域通常是我們關注的。在一幅影象中兩度不連續的區域通常是以下幾項之一:

l        影象深度不連續處

l        影象(梯度)朝向不連續處

l        影象光照(強度)不連續處

l        紋理變化處

理想情況下,對所給影象應用邊緣檢測器可以得到一系列連續的曲線,用於表示物件的邊界。因此應用邊緣檢測演算法所得到的結果將會大大減少影象資料量,從而過濾掉很多我們不需要的資訊,留下影象的重要結構,所要處理的工作即被大大簡化。然而,從普通圖片上提取的邊緣往往被影象的分割所破壞,也就是說,檢測到的曲線通常不是連續的,有一些邊緣曲線段開,就會丟失邊緣線段,而且會出現一些我們不感興趣的邊緣。這就需要邊緣檢測演算法的準確性。下面介紹兩個本文實現的邊緣檢測演算法:canny運算元和sobel運算元進行邊緣檢測。

1.1.1   Canny運算元邊緣檢測

Canny邊緣檢測演算法基於一個多階邊緣運算元,是由John F. Canny於1986年首先提出的[46],他不但給出了邊緣檢測的方法,也提出了邊緣檢測的計算理論。

Canny邊緣檢測器使用一個基於高斯模型派生的檢測模型,因為未處理影象可能含有噪聲,所以開始在原始影象上應用一個高斯濾波器,結果是一個輕度平滑的影象,以至於不至於被單個噪聲畫素干擾全域性重要引數。

以一個5×5的高斯濾波模板為例(見公式3-7),對影象A應用高斯濾波可得B。下面對影象的光強梯度統計都基於圖B。

一幅影象中的邊緣可能在方向上各有所異,所以Canny演算法用四個濾波器分別檢測影象中的水平、垂直和對角線邊緣。邊緣檢測器(如 Roberts, Prewitt, Sobel)值返回一個水平方向分量Gx和豎直方向分量Gy,由此邊緣梯度和方向即可確定:

所有邊緣的角度都在上述選定的四個方向(0°,45°,90°,135°)周圍。下一步通過滯後性門限跟蹤邊緣線。

與小的光強梯度相比,數值較大的光強梯度更容易作為邊緣線。在大多數影象中定義一個門限值來確定光強梯度取值多少適合作為邊緣線通常是不可行的,因此Canny演算法使用滯後作用確定門限值。該方法使用兩個門限分別定義高低邊界。假設所有的邊緣應該不受噪聲影響而且是連續的曲線。因此我們設定一個高門限用於判定確定是邊緣的曲線,再由此出發,利用方向資訊跟蹤那些可追蹤的影象邊緣。當追蹤該邊緣時,應用低門限可以讓我們追蹤那些含有邊緣的區域直到找到下一個曲線的起點。

如圖 3‑5所示,(a)為原圖的灰度圖,(b)為高斯濾波平滑圖,(c)和(d)分別是手動設定的高低門限值如圖所示的canny邊緣檢測結果。根據多組影象資料測試發現,當canny高低門限值分別設定為50,150時能夠保證大部分有效資訊的保留且不會有過多冗餘資訊。因此後文中採用門限值[Thres1,Thres2]= 50,120 作為canny邊緣檢測引數。Opencv中以下程式碼實現:

      cvCanny(dst,src, 50, 120, 3 );

1.1.1   Sobel運算元邊緣檢測

和Canny運算元類似,Sobel運算元[47]也是利用梯度資訊對影象進行邊緣檢測的。對影象進行邊緣檢測時,計算每個畫素的梯度並給出不同方向從明到暗的最大變化及其變化率。這個結果顯示出圖片在該點亮度變化為“急劇”還是“平滑”,由此可以判斷該區域成為邊緣的概率。在實際操作中,這個成為邊緣的可能性(稱為magnitude)計算比計算方向更為可靠,也更為便捷。在影象中的每個畫素點,梯度向量只想亮度增長最大的方向,該梯度向量的長度對應於該方向的光強變化率。這就說明在同一畫素影象上一個區域的某點的sobel運算元是一個零向量,而且在邊緣線上的點上有一組向量值為亮度梯度。

數學上在原影象上應用3×3的掩膜計算水平和垂直兩個方向的變化梯度近似值。如果我們定義A為源影象,和分別作為一幅影象的水平近似梯度和垂直近似梯度,計算方式如下:

式3-9中,*表示二維卷積運算。這裡建立的座標系在x座標方向向右,y座標方向向下,在影象中的每個點,用式3-8描述總梯度大小及方向。用Sobel運算元進行邊緣檢測結果見圖 3‑6所示。