在 OpenCV 中使用预计算特征的 BoW
Posted
技术标签:
【中文标题】在 OpenCV 中使用预计算特征的 BoW【英文标题】:BoW in OpenCV using precomputed features 【发布时间】:2013-03-14 18:15:55 【问题描述】:我需要做 BOW(词袋),但我只有描述的图像关键点。 目前,我已经使用以下方法获得了词汇:
cv::BOWKMeansTrainer bowtrainerCN(numCenters); //num clusters
bowtrainerCN.add(allDescriptors);
cv::Mat vocabularyCN = bowtrainerCN.cluster();
所以现在我需要做分配,但我不能使用计算函数,因为它计算图像的描述符,我已经有了。是否有任何功能可以完成分配或让我手动计算?
【问题讨论】:
【参考方案1】:一旦您使用cv::BOWKMeansTrainer::cluster()
方法构建了词汇表(码本),您就可以将描述符(具有合适的大小和类型)与码本匹配。您首先必须选择您需要的匹配器类型以及要使用的规范。 (见opencv doc)
例如,cv::BFMatcher
和 L2 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;
【讨论】:
太棒了!你救了我的命以上是关于在 OpenCV 中使用预计算特征的 BoW的主要内容,如果未能解决你的问题,请参考以下文章