2013-04-07 253 views
4

我有这样的图像(白色背景和黑色文本)。如果没有噪音(如您所见:数字线的顶部和底部有许多噪音),Tesseract可以识别出数字非常好。如何自定义Tesseract忽略噪音?

但是当有噪音时,Tesseract尝试将其识别为数字并添加更多数字。这真的很糟糕。我如何使Tesseract忽略噪音?我无法制作预处理图像,使其更加鲜明或鲜明。这没有任何帮助。

如果某些工具只能高亮字符串行。这对Tesseract来说可能是非常好的输入。请帮帮我。谢谢大家。

enter image description here

回答

2

你可以尝试下采样的二进制图像,并再次品尝它(pyrDownPyrUp)或你可以尝试smooth你的形象与高斯模糊。并且,如已经暗示的那样,erodedilate您的图像。

1

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

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

做连接组件标签....这是blob计数....所有剂量噪声永远不会匹配数字的大小....与形态学技术的数字也得到修改...标签image ...计算每个标记区域中的像素数量并设置一个阈值(您可以轻松设置,因为您只会有数字和噪音)... cvblob是用C++编写的代码库,可供用户使用...

1

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