我有一个问题,在下面的图片中找到数字。它是由有时会发生的垂直线引起的,有时则不然。我正在寻找如何从图片中删除这些垂直线的想法。
我已经尝试过轮廓检测,但是当它关闭时它选择了行和最接近的数字。我也尝试过形态转换,但它从数字中删除了很多像素。
为了消除短线,我试图查看图像的上半部分并从中检测出发生间隙的位置。在发现间隙之后,我已经将它纵向拉伸,但它再次移除了很多。霍夫变换也没有用。
图片:
您可以尝试使用OpenCV cvMatchTemplate()
中的函数,因为数字是一致的。其他方法是使用Support Vector Machines的库
这也可以在SimpleCV中完成
如果你可以用数字的宽度划分图片,你可以使用erosion然后使用dylatation,因为这绝对是最简单的方法。它应该适用于图片:1,2,3,8。您可以尝试以多种比例使用这两种操作,例如2次侵蚀,2次dylatations; 2侵蚀,1 dylatation等
通常用于消除线的滤波器是逻辑滤波器(垂直定位)和媒体滤波器。您也可以通过之前的dylatation支持mediane过滤器,因为通常您要擦除的行比您的数字更薄。执行mediane后,您可以再次使用侵蚀。
另一种可能性是使用垂直索贝尔滤波器(在缓冲器中放置效果),然后侵蚀/逻辑/媒体原始图像,并最终合并两者。 Sobel将强调水平边缘,因此在合并之后它将消除侵蚀效果,但仅限于数字。它可以在线条顶端附近的位置留下微小的斑点,但任何低通滤波器都可以轻松擦除。
PS。每当侵蚀,卷积或过滤时,只在垂直对齐的像素中进行,以最大限度地利用更细的线条。