1

私はBOW(単語の袋)をする必要がありますが、私は画像の記述されたキーポイントしか持っていません。今のところ、私は以下を使用して語彙を取得しました:

cv::BOWKMeansTrainer bowtrainerCN(numCenters); //num clusters
bowtrainerCN.add(allDescriptors);
cv::Mat vocabularyCN = bowtrainerCN.cluster();

だから今私は割り当てをする必要がありますが、画像の記述子を計算するので計算関数を使用できません、そして私はすでにそれを持っています。割り当てを行う機能はありますか、それとも手動で計算する必要がありますか?

4

1 に答える 1

1

メソッドを使用して語彙(コードブック)を作成しcv::BOWKMeansTrainer::cluster()たら、記述子(適切なサイズとタイプ)をコードブックに一致させることができます。まず、使用する基準で必要なマッチャーのタイプを選択する必要があります。(opencv docを参照)

たとえば、cv::BFMatcherL2 norm

// init the matcher with you pre-trained codebook
cv::Ptr<cv::DescriptorMatcher > matcher = new cv::BFMatcher(cv::NORM_L2);
matcher->add(std::vector<cv::Mat>(1, vocabulary));
// matches
std::vector<cv::DMatch> matches;
matcher->match(new_descriptors,matches);

次に、new_descriptors[i]のコードブックで最も近いコードワードのインデックスは次のようになります。

matches[i].trainIdx; 
于 2013-03-25T15:22:25.577 に答える