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
ご覧のとおり、キーポイントを提供することはできますが、記述子を提供する方法を見つけることができません。
ここで既に作成した記述子を再利用する方法はありますか?