繁体   English   中英

使用BOWImgDescriptorExtractor重用描述符

[英]Re-using descriptors with BOWImgDescriptorExtractor

我有以下代码,旨在通过其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重新计算它们,那将是理想的选择。 如您所见,我能够提供关键点,但无法找到提供描述符的方法。

有什么办法可以重用我已经在这里创建的描述符?

我不得不编写自己的版本的BOWImgDescriptorExtractor ,它使我可以直接传递描述符,而不必重新计算它们。

我只是简单地重用了现有的源代码,但是更改了方法签名以允许我传递描述符,而不是图像数据和关键点,当然,还删除了方法主体中不必要的计算。

注意:我当前正在运行OpenCV的2.4.9版本,但似乎在3.0.0版(尚未发布)中,他们已经使compute过载了,以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM