我必須爲我的masterthesis實現一個android的標誌檢測算法。 我目前在NDK中使用openCV android庫,並已經設法使用SURF檢測這些關鍵點的關鍵點和設置描述符。openCV Android:knnMatcher只返回1個描述符的匹配
我下一步是使用找到2個最近的每一個關鍵點匹配knnMatch,後來我要把這裏遠離與這些第二(的距離比相比,最好的KNN搭配不是十分區分比賽二是過低) 這裏是我的代碼的一部分:
private static List<DMatch> knn(Mat queryDescriptors, Mat trainDescriptors) {
List<List<DMatch>> matches = new ArrayList<List<DMatch>>();
List<DMatch> retMatches = new ArrayList<DMatch>();
DescriptorMatcher matcher = DescriptorMatcher
.create(DescriptorMatcher.BRUTEFORCE);
matcher.knnMatch(queryDescriptors, trainDescriptors, matches, 2);
我在這裏的問題是,當我有例如500所描述爲查詢標誌和400對列車標誌,KNN返回500場比賽,但每一個是爲同一個關鍵點。通常,它會爲每個描述符返回2個最佳匹配,因此有500個不同的描述符,現在它們返回500次匹配一個描述符和相同描述符的最佳匹配。
所以,當我畫這些KNN比賽中,有1條線,繪製500次,始終不變的關鍵點
當我嘗試簡單的匹配,誰只是返回最佳匹配之間,我得到更多的線。 我已經測試了這個圖像與自身的比較。 Knn返回這一行,在這種情況下,一場簡單的比賽吸引了所有500場比賽,這些場合都是正確的。
我找不到這個類似的問題已被治療的任何帖子,有沒有人有這個問題,或知道我在這裏做錯了什麼?
Thanx提前。
謝謝!這工作,我仍然沒有找到正確的比賽,但knnMatches的行爲現在是正常的。 我從來沒有找到openCV錯誤跟蹤器,而搜索這個問題(谷歌,..),但現在我一定會檢查這個問題發生時! 謝謝! – piepie 2012-03-05 14:12:17