1

У меня есть следующий код, который предназначен для группировки набора изображений через дескрипторы функций SIFT.Повторное использование дескрипторов с BOWImgDescriptorExtractor

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 повторного вычисления их. Как вы можете видеть, я могу предоставить ключевые точки, но не могу найти способ предоставить дескрипторы.

Есть ли способ для меня использовать дескрипторы, которые я уже создал здесь?

ответ

2

Я прибегал к написанию своей собственной версии BOWImgDescriptorExtractor, что позволяет мне непосредственно передавать дескрипторы, а не переучитывать их.

Я просто повторно использовал существующий исходный код, но изменил сигнатуру метода, чтобы позволить мне передавать дескрипторы, а не данные изображения и ключевые точки, а также, конечно, удалять ненужные вычисления в теле метода.

Примечание: В настоящее время я запускаю версию 2.4.9 OpenCV, но похоже, что в версии 3.0.0 (которая еще не выпущена) они перегрузили compute для решения этой проблемы.

Смежные вопросы