C ++ - 使用词袋将图片匹配在一起?

时间:2014-07-09 09:40:51

标签: c++ opencv matching sift

我想将图片(与他的描述符)与数据库中的数千张图片进行比较,以便进行匹配。 (如果两张图片是相同的,也就是说同样的东西,但它可以旋转,有点模糊,有不同的比例等。)。

例如: enter image description here

我在StackOverflaw上看到,为每张图片计算描述符并将它们一一比较是一个非常漫长的过程。 我做了一些研究,我看到我可以做一个基于Bag of Words的算法。

我还不确切知道它是如何运作的,但它似乎很好。但是在思考中,我可能会被误解,只是为了检测它不是什么样的物体?

我想知道,如果使用它可以是一个很好的解决方案,比较图片与成千上万的图片使用描述符,如冲浪的Sift

如果是的话,你对我如何做到这一点有什么建议吗?

感谢,

1 个答案:

答案 0 :(得分:1)

是的,有可能。你唯一需要注意的是计算要求,这可能有点压倒性。如果你可以缩小搜索范围,通常会有所帮助。

为了支持我的回答,我将从我们最近的一项工作中提取一些例子。我们的目标是使用SIFT + RANSAC匹配识别博物馆墙上的一幅画。我们有一个博物馆所有绘画的数据库和每个绘画的SIFT描述符。我们的目标是识别可以从不同视角(所有模板都是正面)或在不同光照条件下录制的视频中的痛苦。这个图像应该给你一个想法:在左边你可以看到模板和当前帧。第二个图像是SIFT匹配,第三个图像显示RANSAC之后的结果。

enter image description here

一旦您的图像与数据库中的每个SIFT描述符匹配,就可以计算重投影误差,即匹配点之间的比率(在RANSAC之后)和关键点的总数。这可以针对每个图像重复,并且具有最低重投影误差的图像可以被声明为匹配。

我们将它用于绘画,但我认为可以针对各种图像进行推广(您在问题中发布的Android徽标是我认为的公平示例)。

希望这有帮助!