我正在尝试使用OpenCV (用于C++)的快速实现,以便检查照片中是否包含图像(或图像的一部分)。例如,我拍摄了一张照片,并尝试将其与数据库中的一组图像进行匹配,我希望选择最好的对应图像(如果所有图像都不够好,则会显示错误消息)。
所以,我现在只是在测试OpenCV。我简单地获取了框架(matching_to_many_images)中包含的样本,并将检测器和描述符从SURF更改为BRISK。
然而,我得到了奇怪的结果。以下是匹配的结果(BruteForce Hamming):


在第一个场景中,场景是完全不同的,但有很多比赛!在第二个场景中,场景非常相似,但有些匹配是错误的。
我认为这是一个参数问题-因为在BRISK的演示视频中,结果是重要的。
发布于 2013-03-19 09:28:59
您看过BRISK的OpenCV文档了吗?我不确定您现在使用的是什么参数,但您可以指定阈值和八度,以及模式。http://docs.opencv.org/modules/features2d/doc/feature_detection_and_description.html#brisk上的文档
你也可以尝试不同的特征匹配算法,尽管在轻快的论文中他们似乎也使用了汉明距离
最后,出现错误的要素匹配并不意外;尝试不同的场景以及不同的要素参数,看看结果如何
发布于 2013-03-21 02:02:29
在使用SIFT、SURF、BRISK或任何其他局部描述符进行特征-特征匹配时,通常会有许多不正确的初始匹配。
由于模糊的特征或背景杂乱产生的特征,这些初始匹配中的许多将是不正确的。[来自]
下一步是只选择这些匹配的子集,这些匹配都在两个图像之间的公共转换上达成一致。的7.3和7.4节对此进行了说明。
发布于 2013-07-04 08:14:29
OpenCV Tutorial给出了一个很好的例子,说明了如何提取特征并计算单应性(一种转换,告诉您如何将每个点从一个图像转换到另一个图像)。
您可以将特征检测器/描述符替换为任何其他特征检测器/描述符,这将导致对某些转换(如旋转、缩放)或错误(如模糊或亮度变化)具有不同的鲁棒性。BRISK的基本实现已经定义了meaningful parameters。
最后但并非最不重要的一点是,如果您尝试匹配两个完全不同的图像,您希望得到什么结果?该算法将尝试找到相似性,因此总是计算结果,即使它是无意义的并且分数非常低。只需记住:垃圾输入->垃圾输出。
https://stackoverflow.com/questions/15489642
复制相似问题