如何使用opencv通过角点功能进行两个图像比较?

时间:2018-03-25 02:55:00

标签: c++ opencv computer-vision

我是Opencv的新手,我想通过他们的角落特征而不是其他人来比较两个图像,我尝试了SURF,SIFT,ORB ......,但他们不适合我,有人可以给我一些关于这个的建议?例如,下面的图像image1和image2是相似的,因为它们有很多相同的角(虽然它不准确),但是image3与1和2不相似,谢谢。

1. source image 1 2. source image 2 3. source image 3

1 个答案:

答案 0 :(得分:0)

这里有很多东西需要尝试,其他人可以向你推荐其他解决方案,但这里有我的:

使用Minutiae算法(用于指纹识别的算法)。在细节算法中,提取了一组共同​​特征,例如:

enter image description here

这些被称为Minutiae。正如您所看到的,这些功能非常类似于图像的角落。我建议您使用以下程序:

1)找到角落(你已经这样做了)

2)将每个角分配给一类细节(例如图像的一个类)。您可以使用本地二进制模式算法执行此操作,或者只需遵循指纹算法中的常用配方(请参阅最后的链接或在Google上搜索)。

3)要计算相似度,只需做一些投票。例如,让我们假设一个图像(我称之为A)有4个细节类型a)和两个类型E)。为了计算新图像中的相似度,我将不得不在新图像中计算这些细节。然后,查看每个图像共享多少项目。您可以添加任意数量的功能或细节,以使您的算法更加健壮(并且也很复杂)。

在任何情况下,您都可以在Google中查看Minutiae指纹识别算法(是最着名的数字图像处理算法之一)。您可以在这里找到解释算法的多个幻灯片之一

https://is.muni.cz/el/1433/jaro2008/PV204/um/finger/MinutiaeBasedFpMatching.pdf

请注意修改主算法以满足您的需求

希望有所帮助