在 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::BFMatcherL2 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的主要内容,如果未能解决你的问题,请参考以下文章

Opencv+TF-Slim实现图像分类及深度特征提取

使用 OpenCV 计算特征值、特征向量

开源!OpenCV预训练模型库

Pytorch - 跳过计算每个时期的预训练模型的特征

opencv进阶1

OpenCV-Python之——图像SIFT特征提取