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 corners detection
這篇來補充一個方法
其改善了原先Harris corner algorithm
使得偵測出的角點能夠更平均的分佈在影像上
由於Harris corners detection的方法在使用上存在一些問題
像是避免使用任意的參數K
如何改善角點的聚集,使其能夠平均的分布
像是能夠設定擷取角點的最大數量
以及設定角點與角點之間的最小距離
透過Harris corner detection的參數調整
盡可能取得影像中的所有角點
再去依照使用者設定的角點最大數量、最小距離等條件
去過濾所要的角點資訊
便可達到這樣的目標需求
而這在EmguCV中有直接實作在Image這個類別上
使用起來非常的簡單
Image<Gray, Byte> image = new Image<Gray, byte>("image.jpg"); PointF[][] points = image.GoodFeaturesToTrack( 500, //maximum number of corners to be returned 0.01, //quality level 10, //minimum allowed distance between points 3 //size of the averaging block ); //for all corner foreach (PointF point in points[0]) { //draw a circle at each corner location CircleF circle = new CircleF(point, 3); image.Draw(circle, new Gray(255), 1); }直接呼叫方法GoodFeaturesToTrack
回傳一個PointF的二維陣列
由於這裡採用的是灰階影像(Gray)
所以回傳的PointF二維陣列
其實只是一個一維陣列PointF[0]
那若是帶入彩色影像(Bgr)
則回傳的二維陣列,就會包含三個一維陣列(PointF[0]、PointF[1]、PointF[2])
其中帶入的參數分別是:
偵測角點的最大數量
二值化的quality level
角點間的最小距離
計算eigenvalue的最小區塊大小
處理的結果如下:
可以發現角點分布的很平均
也不會有許多角點擠在一起的狀況
效果看起來相當不錯!!
這個方法提升了複雜度
因為其將Harris corners detection的角點以Harris score做排序
又處理了角點分布的問題
但這個方法
比原先的Harris corners detection更加好用、實用
這也就是為什麼EmguCV未直接實作Harris corners detection的原因吧!
下一篇來介紹相當實用的Fast detection
您的文章对我帮助很大,我是这方面的初学者,非常感谢……
回覆刪除謝謝您的鼓勵,歡迎多來逛逛!
刪除