5

我有这样的图像(白色背景和黑色文本)。如果没有噪音(如你所见:数字线的顶部和底部有很多噪音),Tesseract 可以很好地识别数字。

但是当有噪音时,Tesseract 会尝试将其识别为数字并在结果中添加更多数字。这真的很糟糕。如何使 Tesseract 忽略噪声?我无法制作预处理图像以使其更具对比度或清晰的文本。这没有任何帮助。

如果某些工具可以仅突出显示字符串行。这对 Tesseract 来说是非常好的输入。请帮我。谢谢大家。

在此处输入图像描述

4

6 回答 6

4

你应该尝试腐蚀和膨胀

最基本的形态学操作有两种:腐蚀和膨胀。它们具有广泛的用途,即:

去除噪音

...

于 2013-04-07T13:43:55.523 回答
3

您可以尝试对二进制图像进行下采样并再次对其进行采样(pyrDownPyrUp),或者您可以尝试smooth使用高斯模糊对图像进行采样。而且,正如已经建议的那样,erode还有dilate你的形象。

于 2013-04-07T13:45:11.170 回答
1

我看到您的问题的 3 个解决方案:

  1. 正如已经建议的那样 - 尝试使用erodedilate或某种模糊。这是最简单的解决方案。
  2. 找到所有轮廓(findContours函数),然后删除面积小于某个值的所有轮廓(尝试不同的值,你应该很快找到正确的值)。请注意,该值可能不是恒定的 - 例如,您可以尝试使用 80% 的平均轮廓区域(只需添加所有轮廓区域,将其除以轮廓数量并乘以 0.8)。
  3. 找到所有轮廓。创建一维整数数组,长度等于图像高度。用零填充数组。现在对于每个轮廓:
    I. 找到顶部和底部点(y 坐标值最大和最小值的点)。让我们将此点命名为TB
    二、B.y将索引在和之间的数组的所有元素加一T.y。(因此,如果 B = (1, 4) 且 T = (3, 11) 则将 1 添加到数组 [4]、数组 [5]、数组 [6] ...、数组 [11])。
    找到数组的最大元素。让我们命名这个值v。所有B.y <= v <= T.y应该是字母的轮廓,其他轮廓 - 噪音。
于 2013-04-07T15:12:49.850 回答
1

您可以使用图像处理技术(腐蚀和扩张等形态学操作)轻松去除这些噪声,您可以选择 opencv 进行此操作。

于 2017-07-27T08:34:58.177 回答
0

做连接组件标记....即斑点计数....所有剂量噪声永远无法匹配数字的大小....使用形态学技术,数字也会被修改...标记图像...计数每个标记区域中的像素数并设置一个阈值(您可以轻松设置,因为您只有数字和噪声)...cvblob 是用 C++ 编写的库,可在代码 google 上找到...

于 2013-04-07T16:07:38.803 回答
0

我有类似的问题:小噪音是 tesseract 失败的原因。我不能使用 open-cv,因为我在 android 上开发了一些功能,而 open-cv 是不需要的,因为它很大。我不知道这个解决方案是否很好,但这就是我所做的。

我在图像中找到了所有黑色区域(我添加到自己的区域集的每个区域的点)。然后,我检查该区域中的点数是否大于某个阈值,例如 10、25 和 50。如果为真,我将该区域的所有点设为白色。

于 2020-02-07T23:23:24.677 回答