我正在开发一个应用程序,该应用程序应确定输入图像是否包含印记并返回其位置。对于 RGB 图像,我使用颜色分割并进行验证(使用各种形状因子),对于灰度图像,我认为 SIFT + 验证可以完成这项工作,但使用 SIFT 只会找到我在我的数据库。
在理想情况下,它工作得非常好,如下图所示。
图 1. http://i.stack.imgur.com/JHkUl.png
当输入图像包含数据库中不存在的标记时,会出现此问题。我做的第一件事是检查如果我将类似的印章与输入图像上的印章进行比较,是否会有任何匹配的关键点。在大多数情况下,没有单个匹配的关键点,如果有的话,它们宁愿参考输入图像的其他部分而不是戳记,如图 2 所示:
图 2. http://i.stack.imgur.com/coA4l.png
我还尝试在输入图像和圆形图像之间找到匹配,因为印章是圆形的,但圆形图像的关键点很少(如果有的话)。
所以我想知道是否有任何不同的方法可以让 SIFT 在这种情况下更有用?我想从我的数据库中创建一个包含所有描述符和关键点的矩阵,然后在输入图像和矩阵之间寻找最近的欧几里得距离,但它可能不会工作,因为整个数据库中有很多匹配的关键点(不需要) (见图 2)。
我正在使用 Matlab 并尝试了 VLFeat 和 D. Lowe SIFT 实现。
编辑:
所以我找到了一种强制 SIFT 计算图像上用户定义点的描述符的方法。我的测试图像包含一个圆圈,然后计算描述符并与输入图像匹配,包括图 1 和图 2 下的图像。这个过程重复了从 0 到 10 的尺度。不幸的是它也没有帮助。