gpt4 book ai didi

image-processing - 为 OCR 准备复杂图像

转载 作者:行者123 更新时间:2023-12-04 01:02:52 24 4
gpt4 key购买 nike

我想识别信用卡中的数字。更糟糕的是,源图像不能保证是高质量的。 OCR 将通过神经网络实现,但这不应该是这里的主题。

当前的问题是图像预处理。由于信用卡可能有背景和其他复杂的图形,因此文本不像扫描文档那样清晰。我做了边缘检测的实验(Canny Edge,Sobel),但并不成功。
同样计算灰度图像和模糊图像之间的差异(如 Remove background color in image processing for OCR 所述)并没有导致 OCRable 结果。

我认为大多数方法都失败了,因为特定数字与其背景之间的对比不够强烈。可能需要将图像分割成块并为每个块找到最佳的预处理解决方案?

您对如何将源转换为可读的二进制图像有什么建议吗?
边缘检测是要走的路还是我应该坚持使用基本的颜色阈值?

这是灰度阈值方法的示例 (我显然对结果不满意):

原图:

Original image

灰度图像:

Greyscale image

阈值图像:

Thresholded image

感谢您的任何建议,
瓦伦丁

最佳答案

如果可能的话,要求使用更好的照明来捕捉图像。低角度的灯会照亮凸起(或凹陷)字符的边缘,从而大大提高图像质量。如果要由机器分析图像,则应优化照明以提高机器可读性。

也就是说,您应该研究的一种算法是描边宽度变换,它用于从自然图像中提取字符。

Stroke Width Transform (SWT) implementation (Java, C#...)

全局阈值(用于二值化或剪裁边缘强度)可能不会在此应用程序中削减它,相反,您应该查看局部阈值。在您的示例图像中,“31”后面的“02”特别弱,因此搜索该区域中最强的局部边缘比使用单个阈值过滤字符串中的所有边缘要好。

如果您可以识别字符的部分片段,那么您可以使用一些定向形态学操作来帮助连接片段。例如,如果您有如下两个几乎水平的段,其中 0 是背景,1 是前景......

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0
0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0

那么您可以沿水平方向执行形态学“关闭”操作,仅将这些段连接起来。内核可能是这样的
x x x x x
1 1 1 1 1
x x x x x

有更复杂的方法可以使用 Bezier 拟合甚至 Euler 螺旋(也称为回旋曲线)来执行曲线完成,但是识别要连接的线段的预处理和消除不良连接的后处理会变得非常棘手。

关于image-processing - 为 OCR 准备复杂图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com