JavaCV - 实现一个好的描述符匹配器

时间:2012-10-04 09:06:47

标签: image image-processing javacv matcher

我正在开发一个程序来检测两张图片之间的相似性,以确定它们是否代表同一个对象。在研究了这个主题后,我确定需要3个主要部分:

  • 探测器
  • 提取器/描述符
  • 匹配者

我已经成功实现了前两个(PM me,如果你需要帮助,我知道这可能是一个巨大的痛苦),但我遇到了匹配问题。这是我使用的代码的一部分:

    DMatch matches = new DMatch();
    BFMatcher matcher = new BFMatcher(NORM_HAMMING, true);
    [...]
    matcher.match(descriptor1, descriptor2, matches, null);
    System.out.println("Matches: " + matches.capacity());

matches.capacity()的输出是58,当我希望它将是完全相同数量的关键点或描述符点时(因为我正在将图像与自身进行比较......)。 我期待错误的结果吗?我做错了什么吗?一些帮助将不胜感激:)

修改

我已经设法完成了我的程序,现在可以回答我自己的问题,希望它可以帮助我以前的情况:

matcher.match(...)方法计算描述每个图像的二进制字符串或浮点向量(例如descriptor1和descriptor2),返回查询索引(keypoints1中关键点的索引),列车索引(关键点索引2等价物)匹配queryIndex中的点和这些点之间的汉明距离。这将图像1中的每个点与图像2中的每个点匹配(至少从drawMatches,这是我的结论),但如果要确定两个图像之间的匹配率,则需要过滤DMatch匹配内容。为此,您必须自己创建一个算法(我在网上找到的算法都不是很好,例如2 * minDist)。

如果您需要更多帮助或一些代码,请不要犹豫PM我。我知道理解整个图像匹配过程是多么令人沮丧!

1 个答案:

答案 0 :(得分:0)

您应该使用matches.size()来获取找到的有效匹配数(capacity给出内部数组分配的大小)。