gpt4 book ai didi

java - 从图像中解析字符以进行 OCR 的算法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:49 25 4
gpt4 key购买 nike

我正在研究 OCR,现在我正在努力将每个单独的字符与其他字符区分开来。例如,如果我有一张图片显示以下内容:

12345678.90

我想检测图像中每个数字开始位置和结束位置的 x,y 坐标,以便我可以确定要处理的数字数量,然后解析出每个单独的数字/字符,以及处理它。

我已经为此设计了一个简单的算法,我想就如何改进它提出一些意见/评论。

(在这个应用中,我只需要处理数字,但如果这个算法也能解析出字母,那就更好了)。

  • 1) 我会在图像底部的一条直线上读取图像中的像素。例如,如果图像是 30x30,那么我将从 0.30 开始读取到 30.30。

  • 2) 我会比较像素的颜色。确定背景和前景颜色后,我将比较每个像素的颜色,看它是在背景中还是在前景中。

  • 3) 如果它是背景,它将被忽略。如果我在前景中遇到任何像素,那将表示数字的开始。在那种情况下,我会记下位置,然后开始向上读取像素。例如,如果我在 5,30 处检测到前景颜色,我将开始阅读 5,29、5,28 等。

  • 4) 我会向上(y 轴)读取像素,直到遇到背景颜色中的像素。这应该给我角色的高度。 (我知道对于像 5 这样的一些字符,它会更复杂,让我们暂时忽略它们)。所以我会确定,例如,字符从 5,20 垂直移动到 5,30。

  • 5) 然后我会回到 x 轴 (5,30),我在该处检测到角色的水平起点。我会继续水平阅读以确定字符的宽度,例如 6,30、7,30 等。

  • 6) 这是棘手的步骤。我猜,在以下每个字符之间:

    12345678.90

背景颜色有一个像素左右的间隙。而且它可能对我们不可见,但它在那里并且会被程序找到,因为它会水平地逐个像素地读取颜色。这会告诉它字符水平结束的位置。因此,例如,它可能会检测到 15、30 处的背景色像素。

  • 7) 这就是算法,它应该给出每个字母开始位置和下一个字母开始位置的 x,y 坐标。在上面的示例中,角色将从 5,20 运行到 15,30,并且是 10x10。

是否可以改进此算法,和/或我对第 6 步的假设是否正确?

最佳答案

据我所知,一种常见的数字分割方法是滑动窗口。基本思想是在数字图像上滑动一个一定大小的窗口。

滑动窗口的每次移动都会生成一个图像(您只能查看窗口覆盖的像素)。滑动窗口将变窄。现在可以训练分类器,它将滑动窗口映射到 1 或 0,其中 1 表示滑动窗口以 2 位数字的分割为中心,0 表示相反。

您需要一些训练数据来训练分类器。或者您可以尝试使用无监督学习。

编辑:这个视频很有用:https://www.youtube.com/watch?v=y6ga5DeVgSY

关于java - 从图像中解析字符以进行 OCR 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18817533/

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