2012-04-19 51 views
1

我有一個關於這個以前問問題的後續問題:如何使用OpenCV的flannbasedmatcher訪問與最好的關鍵點匹配最佳的圖像和dmatch

How to use flann based matcher, or generally flann in opencv?

特別是關於答案的這一部分:

/* for kk=1 to matches.size() 

     the best match for queryKeypoints[matches[kk].queryIdx].pt 
     is dbKeypoints[matches[kk].imgIdx][matches[kk].trainIdx].pt 
*/ 

我的問題是以下幾點:是否有可能使用opencv的flannbasedmatcher match()函數和dmatch結構來訪問從中找到最佳匹配關鍵點(最短距離)的圖像呃,如果是的話,怎麼會這樣做呢?

具體來說,在將查詢圖像與一組圖像進行比較時,如何做到這一點?在這種情況下,使用所有關鍵點混合在一起構建的flann k-d樹(然後相應的圖像標籤未與樹中的關鍵點相關聯)?或者有沒有辦法訪問給定關鍵點所屬的圖像?

任何其他的關於flannbasedmatcher match()和train()函數如何工作的指針都會很好,因爲我已經搜索了源代碼,但仍然有點神祕 - 謝謝。

任何指導非常感謝 - 謝謝!

回答

2

Dmatch屬性imgIdx報告匹配關鍵點所屬的「火車」圖像的索引。使用DescriptorMatcher.add將描述符的向量附加到「訓練」圖像描述符的向量中。這是由你知道,圖像ID X對應於一個特定的圖像文件。

+1

非常感謝您的回覆。我創建了一個trainDescriptors矢量,爲每個訓練圖像添加一個cv :: Mat描述符到這個矢量中。我感到驚訝的是,如果我在我的火車描述符向量中有3個條目(3個描述符集合,用於3個訓練圖像),我有時仍會得到5的imgIdx值(或者比我的訓練圖像數量大一些這樣的數字)。這是預期的嗎?我預計imgIdx對於3圖像trainDescriptor大小不會大於2(0,1或2)。我很欣賞任何建議。 – user1325426 2012-05-19 00:10:54

+0

更具體地說,我使用以下函數:'void DescriptorMatcher :: match(const Mat&queryDescriptors,vector &matches,const vector &masks)''用於一個查詢圖像和圖像集之間的匹配。然後我檢索'matches.at(0).imgIdx'(matches.at(0)應該是最好的(最短距離)匹配關鍵點,所以imgIdx應該告訴我最好的cv :: Mat trainDescriptor索引,關鍵點來了,等於我最初的圖像矢量圖像的最佳圖像索引,對嗎?但是我得到的imgIdx大於我的原始數量的訓練描述符。 – user1325426 2012-05-20 07:07:30

相關問題