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 typeFastDetector的建構式中
帶入的參數分別是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個點
這樣的演算法處理速度非常的快
因此這個演算法在實用上的程度很高
許多視覺追蹤的應用都是透過這個方法取得特徵點
並且在影片中(快速的連續影像)去追蹤這些特徵點
來達到物件追蹤的目的
而下一篇將來介紹尺度不變性的特徵擷取
沒有留言:
張貼留言