2013年5月15日 星期三

EmguCV Image Process: Detecting and Matching Interest Points part3

20101219030.jpg
EmguCV Image Process: Detecting and Matching Interest Points

參考OpenCV 2 Computer Vision Application Programming Cookbook第八章

介紹內容如下:

Detecting Harris corners

Detecting FAST features

Detecting the scale-invariant SURF features

Describing SURF features

上一篇介紹了Harris operator

其提供了一個完整的數學定義用來偵測兩個垂直方向的明度變化

也就是角點的偵測

但這個方法必須去計算影像的導數

這是一個相當複雜的運算

尤其要了解

通常興趣點(角點)的偵測,只是某些複雜演算法的第一步而已

後續還要做許多延伸的處理

那麼快速的興趣點偵測就顯得相當重要

這裡要介紹一個快速的角點偵測

稱之為:Fast detector (Feature from Accelerated Segment Test)


在EmguCV的使用上相當容易

EmguCV將許多特徵點的偵測方法

包裝到Emgu.CV.Features2D這個namespace下

所以在使用前必須先引用這個namespace

Image<Gray, Byte> image = new Image<Gray, byte>("image.jpg");
//Construction of the Fast feature detector object
FastDetector detector = new FastDetector(40, true);
//feature point detection
VectorOfKeyPoint keypoints = detector.DetectKeyPointsRaw(image, null);
//draw keypoints on an image
Image<Bgr,byte> result = Features2DToolbox.DrawKeypoints<Gray>(
    image,     //original image
    keypoints, //vector of keypoints 
    new Bgr(255, 255, 255), // keypoint color
    Features2DToolbox.KeypointDrawType.DEFAULT); //drawing type
FastDetector的建構式中

帶入的參數分別是threshold、nonmaxSupression

這裡設定的threshold為40,nonmaxSupression為true

然後這裡有一個特別的類別:Features2DToolbox

這在EmguCV 2.3.0的版本上是沒有的

這個類別在2.4.0版本之後才有被實作出來

主要是方便使用者將偵測的角點集合做處理

這裡使用的DrawKeypoints就是方便將角點畫到指定的影像上

只是這裡要注意的是

其結果影像,固定是Bgr空間的彩色影像

而來源影像,則可以透過泛型的方式設定其色彩空間

其結果如下:

可以看出結果也算是相當不錯

若這邊把nonmaxSupression參數設為false

則結果如下:

可以發現許多偵測的結果都很接近並重疊在一起

這個參數在EmguCV的文件上說明為:

Specifiy if non-maximum supression should be used.

是否執行非最大抑制處理

可以發現在設定為true的狀況下,結果是比較好的!!


而Fast detection之所以會比較快速的原因在於

如何去定義什麼樣的因素構成了角點

Fast detection的方法的判斷依據是:

一個假定為feature的點的周圍的亮度(intensity)

也就是判斷圍繞在假定點周圍的鄰近點中

找出亮度值(intensity)與假定點有顯著差異的點

若這些點是連續的分布在一個弧形上,其弧形的長度大於3/4的周長

則這裡可以宣稱這個假定點就是feature


這可以透過簡單而且快速的計算方式來達到目的

最簡單的方式就是去計算假定點周遭的四個鄰近點

只要至少三個點比假定點(中心點)更亮或更暗

就能表示中心點是一個feature

那在一般的計算中

是以半徑3 pixels來做計算能夠取得比較好的結果

也就是處理鄰近16個點

這樣的演算法處理速度非常的快

因此這個演算法在實用上的程度很高

許多視覺追蹤的應用都是透過這個方法取得特徵點

並且在影片中(快速的連續影像)去追蹤這些特徵點

來達到物件追蹤的目的


而下一篇將來介紹尺度不變性的特徵擷取

沒有留言:

張貼留言