【问题标题】:How to filter a texture from an image for OCR如何从图像中过滤纹理以进行 OCR
【发布时间】:2014-09-16 14:12:37
【问题描述】:

我正在尝试对某些具有如下纹理的表单进行 OCR:

此纹理会导致 OCR 程序忽略它,将其标记为图像区域。

我考虑过使用形态学。带有星号的关闭操作最终如下:

这个结果对于 OCR 来说仍然不够好。

当我手动擦除“胡椒”并对图像进行自适应阈值处理时,如下在 OCR 上会产生良好的效果:

您对这个问题还有其他想法吗?

谢谢

【问题讨论】:

  • 您可以控制哪些变量?例如,字体是否始终相同,您是否总是在寻找数值等
  • 你可以接受的结果是什么?
  • 我更喜欢通过尽可能消除纹理来解决它。原则上,字体总是相同的,在某些情况下会有字母或数字。我处理它在 OCR 上将字符列入白名单以避免图像上的模式匹配。谢谢
  • 你只有二值化输入吗?
  • 不仅,这里还可以找到原版的区域。最终目的是使其结构化。 i.imgur.com/cg3Ee65.jpg

标签: opencv image-processing ocr scikit-image leptonica


【解决方案1】:

对于给定的图像,5x5 中值滤波器的效果比关闭要好一些。从那里,具有自适应阈值的二值化可以去除更多的背景。

无论如何,最终的质量在很大程度上取决于图像,无法达到完美的效果。

【讨论】:

  • 这有帮助,谢谢。也许像 Otsu 的门槛那样的 Global 做得更好。
  • 不幸的是,纹理级别在边缘上仍然很重要,并且恒定的阈值并不是最好的。也许你可以在角色的第一个粗略位置之后屏蔽掉不需要的区域。
  • 这是我在平方 (5) 中位数后使用 Global Otsu 得到的结果。 i.imgur.com/f8bVjPY.png 。也许现在我可以按照建议进行一些连接组件过滤(尽管我不是很熟悉),因为精明的边缘看起来很有希望。谢谢。任何反馈真的很受欢迎。 i.imgur.com/C5gJmiY.png
  • 您可以根据 blob 大小进行过滤,但请注意您会丢失点和逗号,并且会遇到碎片字符的问题。我认为二值化图像上的 Canny 边缘不会有任何帮助。
【解决方案2】:

也许看看这个:https://code.google.com/p/ocropus/source/browse/DIRS?repo=ocroold(见 ocr-doc-clean)。

【讨论】:

    【解决方案3】:

    考虑到您知道字体大小,您还可以考虑使用连通分量过滤,也许与形态学操作相结合。为了能够保留逗号,如果一个较小的连接组件靠近一个与您尝试阅读的字符大小相似的连接组件,请小心。

    【讨论】:

      【解决方案4】:

      背景图案非常规则和方向性,因此傅里叶域中的过滤在这里必须做得很好。例如尝试Butterworth filter

      可以找到使用 gimp 进行此类过滤的具体示例 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-30
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        • 2013-04-22
        • 2012-08-20
        • 2013-09-19
        • 2019-06-04
        相关资源
        最近更新 更多