如何自定义Tesseract忽略噪音?

时间:2013-04-07 13:06:18

标签: c# opencv character ocr tesseract

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

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

如果某些工具可以仅高亮显示字符串线。它对Tesseract来说可能是非常好的输入。请帮我。谢谢大家。

enter image description here

6 个答案:

答案 0 :(得分:3)

您应该尝试eroding and dilating

  

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

     

消除噪音

     

...

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我有类似的问题:小的噪音是tesseract失败的原因。我无法使用open-cv,因为我在android上开发了一些功能,而open-cv则因为它的尺寸太大而变得多余。我不知道这种解决方案是否很好,但这就是我所做的。

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