如何在图像中定位对准标记

12

我正在设计一个系统,可以将规范化的表格扫描成图像(例如 TBitmap)。我希望能够识别这些页面上的对准标记,并使用这些裁切标记的位置将页旋转到适当的方向(使顶部实际上是朝上),并将图像裁剪到对准标记的位置。

以下是需要定位的典型标记示例图像:

裁剪标记
(来源:tpub.com

有哪些技术可以评估从扫描仪获取的图像,以查找图像中的各种标记?我需要定位多个标记及其中心点位置。


2
我知道许多图像SDK,包括LEADTools都已经内置了这个功能。虽然我不知道如何自己实现它,但我认为我会使用水平线检测算法(在x度范围内),和垂直线检测算法,然后检查所有可能的+点是否形成了90%连续的圆形。 http://www.leadtools.com/help/leadtools/v15/main/api/dllsteps/detectingregistrationmarks.htm - Warren P
2
嗯,我不是专家,但那不是裁切标记,而是打印机在进行四色印刷时使用的对齐标记。裁切标记只是简单的直线。 - mj2008
Warren P:感谢提供链接和建议的方法。如果需要,我可以使用商业库。我也有更改所使用符号的自由,因此LeadTools产品可能是可行的解决方案。 - Greg Bishop
MJ2008:说得好,我的术语可能不太准确。我真正需要的是能够识别某种标记,以便我可以将其裁剪。我当然愿意称其为对齐标记;尽管对于我的目的来说,它也是一种裁剪标记,我想。 - Greg Bishop
我怀疑这些标记的大小并不总是相等的,但你可能会从这篇荷兰帖子中获得一些灵感,它使用了ScanLine函数,效果相当不错。 - NGLN
显示剩余2条评论
3个回答

6

只是列举了一些可能的方法。

模板匹配

一种蛮力法是拥有一个注册标记外观的位图图像。然后,对于图像中与模板位图具有相同宽度和高度的每个可能的矩形,都将图像像素与模板像素进行比较。如果大多数对应的像素匹配,则可能找到了一个注册标记。这非常计算密集,因为您必须扫描所有可能的位置、旋转、比例因子等。您可以通过利用已知的东西来缩小范围。例如,您的注册标记是对称的,因此您不需要检查所有可能的旋转。也许您知道标记应该是确切大小,因此可以避免迭代不同的比例因子。最后,您可能知道注册标记应该靠近角落,因此可以跳过图像的大部分中间部分。

有趣的点

找到一种方法来在图像中识别“有趣的点”。例如,似乎处于交叉口中心的点可以通过使用增强具有基本方向上匹配像素的小核进行卷积,然后阈值化结果来找到。这会给出一个看起来像是交叉点的像素列表(可能会有一些噪声)。您可以在该坐标的子集中搜索类似于注册标记中的五个交点的“星座”。您可能仍然需要应用模板匹配来找到最可能的位置,但这将大大减少您否则必须尝试的位置、旋转和比例因子的数量。

特征检测

有线条检测、圆检测等算法。您可以运行其中一些, 然后寻找一个圆内两个相交线段的组合。这可能是最稳健的方式,但也可能是最难实现的方法。

如果图像本身不够清晰,则一些预处理步骤,如运行边缘检测器、阈值化或膨胀、腐蚀过滤器可能也会有所帮助。


2
如果裁剪/对齐标记可以被视为字符并且可以处理,为什么不使用OCR呢?这只是我的想法。 - menjaraz
menjaraz:我也考虑过使用OCR。但是,我以前从未使用过它。是否可以“训练”OCR工具学习新字符?OCR是否能够返回中心点?或者,如果使用“T”符号,OCR是否能够返回“T”中两条线的交点? - Greg Bishop

2
我找到了这个法语的PDF资源,作者是Colin BOUVRY,讨论的是玻璃上刻字和符号的识别。

如果您不懂法语,不用担心:文档底部列出了一堆有价值的Delphi源代码,相信我!

谢谢。


0

对于标记,您可以使用Hough变换来检测圆和直线,然后检查是否有任何交叉线位于任何圆的中心位置,那么它就是您的标记。我不确定Delphi是否支持,但Hough变换算法是众所周知的,并且在许多库中实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接