5

我正在尝试使用 OpenCV 的 BRISK 实现(用于 C++),以便检查照片中是否包含图像(或图像的一部分)。例如,我拍了一张照片,然后尝试匹配它在数据库中有一组图像,我想选择最佳的相应图像(如果所有图像都不够好,则出现错误消息)。

所以,我现在只是在测试 OpenCV。我只是采用了框架中包含的样本(matching_to_many_images),并将检测器和描述符从 SURF 更改为 BRISK。

但是,我有奇怪的结果。这些是匹配的结果(BruteForce Hamming):

蛮力汉明

蛮力汉明

第一个,场景完全不同,但有很多比赛!在第二个中,场景非常相似,但有些匹配是错误的。

我认为这是一个参数问题——因为在 BRISK 的演示视频中,结果非常重要。

4

3 回答 3

3

在使用 SIFT、SURF、BRISK 或任何其他局部描述符进行特征特征匹配时,通常会出现许多不正确的初始匹配。

由于模糊的特征或背景杂波产生的特征,这些初始匹配中的许多将是不正确的。[来自尺度不变关键点的独特图像特征]

下一步是只选择那些都同意两个图像之间的共同转换的匹配子集。这在Scale Invariant Keypoints 的独特图像特征的第 7.3 和 7.4 节中进行了解释。

于 2013-03-20T18:02:29.383 回答
3

你看过 BRISK 的 OpenCV 文档吗?我不确定您现在使用什么参数,但您可以指定阈值和八度音阶以及模式。http://docs.opencv.org/modules/features2d/doc/feature_detection_and_description.html#brisk上的文档

您也可以尝试不同的特征匹配算法,尽管在 BRISK 论文中他们似乎也使用了汉明距离

最后,出现错误的特征匹配并不出人意料。尝试不同的场景以及不同的特征参数,看看你的结果如何

于 2013-03-19T01:28:59.217 回答
3

OpenCV 教程提供了一个很好的示例,说明如何提取特征和计算单应性(一种告诉您如何将每个点从一个图像转换到另一个图像的转换)。

您可以将特征检测器/描述符替换为任何其他的,这将导致对某些转换(如旋转、缩放)或模糊或亮度变化等错误的不同鲁棒性。BRISK 的基本实现已经定义了有意义的参数

最后但同样重要的是,如果您尝试匹配两个完全不同的图像,您会期望得到什么结果?该算法将尝试寻找相似之处,因此总是计算一个结果,即使它是无意义的并且分数非常低。请记住:垃圾输入 -> 垃圾输出。

于 2013-07-04T00:14:29.450 回答