边缘特征提取方法
邊緣檢測是圖形圖像處理、計算機視覺和機器視覺中的一個基本工具,通常用于特征提取和特征檢測,旨在檢測一張數字圖像中有明顯變化的邊緣或者不連續的區域,在一維空間中,類似的操作被稱作步長檢測(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所示。
from:?http://blog.csdn.net/abcjennifer/article/details/7427033
總結
- 上一篇: MFC 多文档中同时打开多个文档
- 下一篇: OpenCV中 CvArr、Mat、Cv