1

SIFT 機能記述子を介して一連の画像をクラスター化することを目的とした次のコードがあります。

cv::BOWKMeansTrainer trainer = cv::BOWKMeansTrainer(n_clusters);

for (Image* image : get_images()) {
    trainer.add(image->get_descriptors());
}

cv::Mat vocabulary = trainer.cluster();
cv::BOWImgDescriptorExtractor extractor(Image::get_extractor(), Image::get_matcher());
extractor.setVocabulary(vocabulary);

for (Image* image : get_images()) {
    cv::Mat bow_descriptor;
    extractor.compute(image->get_data(), image->get_key_points(), bow_descriptor);

    // Determine which cluster the image matches best, via bow_descriptor..
}

私が抱えている問題は、呼び出した時点で画像の記述子を既に計算しているため、再計算するBowImgDescriptorExtractor::computeのではなく、これらを提供できれば理想的です。BowImgDescriptorExtractor::computeご覧のとおり、キーポイントを提供することはできますが、記述子を提供する方法を見つけることができません。

ここで既に作成した記述子を再利用する方法はありますか?

4

1 に答える 1