用 SIFT 检测数字图像上的印章(印章)印记

Posted

技术标签:

【中文标题】用 SIFT 检测数字图像上的印章(印章)印记【英文标题】:Dectecting stamp (seals) imprints on digital image with SIFT 【发布时间】:2012-07-29 06:35:02 【问题描述】:

我正在开发一个应用程序,该应用程序应确定输入图像是否包含印记并返回其位置。对于 RGB 图像,我使用颜色分割并进行验证(使用各种形状因子),对于灰度图像,我认为 SIFT + 验证可以完成这项工作,但使用 SIFT 只会找到我在我的数据库。

在理想情况下它工作得非常好,如下图所示。

图。 1. http://i.stack.imgur.com/JHkUl.png

当输入图像包含数据库中不存在的标记时,会出现此问题。我做的第一件事是检查如果我将 similar 标记与输入图像上的标记进行比较,是否会有任何匹配的关键点。在大多数情况下,没有一个匹配的关键点,如果有的话,它们宁愿参考输入图像的其他部分而不是戳记,如图 2 所示。:

图。 2. http://i.stack.imgur.com/coA4l.png

我还尝试在输入图像和圆形图像之间找到匹配,因为图章是圆形的,但圆形图像的关键点很少,如果有的话。

所以我想知道是否有任何不同的方法可以使 SIFT 在这种情况下更有用?我想从我的数据库中创建一个包含所有描述符和关键点的矩阵,然后在输入图像和矩阵之间寻找最近的欧几里得距离,但它可能不会工作,因为整个数据库中有很多匹配的关键点(不需要) (见图 2)。

我正在使用 Matlab 并尝试了 VLFeat 和 D. Lowe SIFT 实现。

编辑:

所以我找到了一种强制 SIFT 计算图像上用户定义点的描述符的方法。我的测试图像包含一个圆圈,然后计算描述符并将其与输入图像匹配,包括图 1 和图 2 下的图像。这个过程重复了从 0 到 10 的尺度。不幸的是它也没有帮助。

【问题讨论】:

如果你所有的邮票都是圆形的,我实际上会从霍夫变换开始寻找圆圈。然后您可以只选取候选区域并将它们与您的实际邮票图像进行比较。我想你也许可以训练一个 SVM 或其他东西来处理它。 【参考方案1】:

这只是初步提示,并不是对 SIFT 问题的完整答案。

我的印象是,通过 SIFT 将圆与圆的图像进行匹配来检测圆并不是最好的方法,尤其是当您要检测的圆内部有一些未知纹理时。

圆检测的教科书算法是Hough transform,它主要用于线检测,但适用于任何可以用少量参数描述的形状(同事告诉我,3 以上的情况会变得很糟糕,但一个圆圈只有 X、Y 和 r)。文件交换中有几个implementations,链接只是一个例子。霍夫圆检测需要您为要检测的半径设置一个上限,但这对于您的应用来说似乎没问题。

从您提供的示例看来,如果您能可靠地检测到圆圈,您应该会走得很远。

【讨论】:

感谢您的回答。我知道霍夫变换,但最初的想法是使用 SIFT,因为它与霍夫变换相比是尺度不变的,这使得它消耗资源。但是,如果我没有想到要使用 Hough 变换的任何想法,我也会尝试使用 Harris 角点检测器。霍夫变换的另一个缺点是我还检测到方形、矩形、三角形、椭圆形印章。还有一组形状不规则的邮票,无法描述。 我明白你的意思——你想知道 SIFT 是否能胜任这项工作。根据我对 SIFT 的经验,我认为它可能不能,至少不能检测圆形或形状检测部分。这根本不是 SIFT 的用途:它聚合纹理的局部属性(以在某些变换下不变的方式),但它不知道像圆等几何实体。如果你想用 SIFT 检测未知模式,我认为您必须使用完整的机器学习方法,例如,将 SIFT 描述符输入到您根据已知模式进行训练的 SVM。【参考方案2】:

实际上,我认为 SIFT 不会解决这个问题。我一直在玩 SIFT 很长一段时间,我的结论是它非常适合识别相同的模式,但不适用于相似的模式。 看看 SIFT 特征向量的构造:描述符由几个梯度直方图组成(!)。如果您的数据库中的模式在图章中具有 非常 类似 blob 的结构,那么您可能有机会。但如果这不成立,那我猜你不会很幸运。

在我看来,您已经解决了查找 indentical 对象(邮票)的问题,现在扩展到查找 相似 对象。这听起来很像,但在我过去的研究中,我发现这些问题只是相关但不太相同。

您的应用程序中是否有任何运行时限制?可能还有其他方法,但在这种情况下,关于可能的约束的更多输入可能会很有用。

关于约束的更新: 所以你的下一个任务可能是检测未知的邮票,对吧? 这听起来像是一个分类任务。

在您的情况下,我首先会尝试找到一个描述符/表示(或 SVM),将图像分类为戳/无戳。为了评估这一点,请建立一个数据库,其中包含基本事实和合理数量的“未知”邮票和其他图像,例如来自字母的随机快照,不包含邮票。这将是您的测试集。

然后尝试使用一些描述符/表示来计算图像之间的距离/相似度,从而将测试集分类为 STAMP / NO-STAMP 类。当您找到在分类方面表现良好的描述符/距离度量(或 SVM)时,您可以对字母执行滑动窗口方法来查找标记。滑动窗口方法当然不是一种非常快速的方法,而是一种非常简单的方法。 至少当您达到这一点时,您可以调整检测 - 例如基于有趣的点检测器......但一步一步......

【讨论】:

SIFT 是对的,它不适用于我的工作。我试图提取 SIFT 计算特征向量的关键点,并将它们放在邮票的边缘,但 SITF 仅对纹理敏感,它不会像这样工作。这就是为什么我放弃它并使用循环霍夫,霍夫作线和其他方法,建议here。 要回答你的问题,我没有任何运行时约束,因为它是我的 Bsc 论文的一部分,但另一方面我不能走极端。如果您有任何建议,请分享,将不胜感激。

以上是关于用 SIFT 检测数字图像上的印章(印章)印记的主要内容,如果未能解决你的问题,请参考以下文章

ps中怎么把公章转动一下

用例建模Use Case Modeling

C#如何在PDF文件添加图片印章

[POI2015]Piecz??

用iPhone制作电子印章!超有趣

数据结构与算法—印章问题