非常精确的线路检测,openCV Java

时间:2017-11-06 18:53:46

标签: java opencv hough-transform opencv3.1 canny-operator

我将从现实世界的应用程序中解释问题开始;我有一个指向黑暗表面的相机。送纸器(只是简单的机器,当控制计算机告知页面时会将页面吐出)将纸张送入相机正在查看的区域。

使用openCV我将处理图像,并确定进纸器是否正确送入。

这意味着我必须能够确定页面是否存在,但是如果存在多个页面。有时多页被送入,因为它们粘在一起,在这种情况下,页面非常接近完全对齐,除非你仔细观察,否则它们在视觉上看起来是一页。

我遇到的问题是Canny边缘检测与Hough变换相结合,并不能满足我的需要。使用Canny在图像中查找纸张的典型示例返回结果,其中每个页面边缘是多行(5-15)。使用查找轮廓确定这是一个矩形。

这些典型示例没有帮助,因为我需要能够检测到非常靠近页面边缘的另一条线。

我一直在玩霍夫变换的阈值以及我在Canny之前应用了多少模糊并且让它相当可靠,但问题是我相信灵敏度现在太低而且任何页面此系统不会检测到上述示例中的馈送(在彼此之上)。

实施例: Feed

上面的图片有两个可见页面,一个刚刚从进纸器出来。页面上有文字。我需要能够识别页面的角度,并且实际上只有一页。

我遇到的问题是我需要足够灵敏的线检测能够判断是否有两个页面粘在一起,但我还需要检测到页面上的文本行。

1 个答案:

答案 0 :(得分:0)

我建议你不要寻找覆盖另一张纸的微弱线条,但要寻找这个白色区域的整体形状。如果您知道所有这些页面都是A4尺寸 - 您会找到白色区域的矩形并检查角度是否正确以及边的比例是2的平方根。如果两张纸是完全对齐的 - 您会不管怎么说都没检测到它,除非你以某种方式测量纸的厚度。

有一个角点检测滤镜可以帮助您找到矩形ABCD的角。那么你只需检查矢量AB是否垂直于BC和AD等等。此外,如果在紧凑的白色区域内检测到超过4个合理阈值的角落 - 这是一条消息"有些事情不行。"