【问题标题】:Deskewing an image with background (Python)用背景校正图像(Python)
【发布时间】:2022-01-12 18:38:00
【问题描述】:

我正在做一个项目,我正在对标签上的文本进行 OCR。我的工作是去歪斜图像以使其在 tesseract 中可读。

我一直在使用this approach,它对图片进行灰度和阈值化,获取黑色像素的坐标,在其周围绘制一个 minAreaRect,然后通过该矩形的倾斜角度来校正倾斜。这适用于,但不适用于具有背景的图像,例如呈现的图像。在那里,它计算 0.0 的倾斜角并且不旋转图像。 (预期结果:17°)

我怀疑这是因为背景中有黑色像素。由于它们,minAreaRect 围绕整个图片,因此导致倾斜角为 0。

我尝试进行背景移除,但找不到足够好的方法,因此只留下带有文本的标签

我尝试的另一种方法是通过 k-means-clustering 对像素进行聚类。但即使手动选择一个好的 k,带有文本的簇仍然包含部分背景。

更不用说我还需要另一种方法来遍历所有集群并使用某种启发式方法来确定哪个集群是文本,哪个是背景,这将花费大量运行时间。

校正有背景的图像的最佳方法是什么?

【问题讨论】:

  • 那些标签会一直有那个二维码吗?
  • 你不能只用白色门槛来获得标签。然后获取标签内文本周围的区域,或者在使用参考中的代码使背景也变成白色后,将标签歪斜。
  • 我不明白你所说的白色阈值是什么意思,你能详细说明一下吗?根据我收集的信息,您的建议是对白色像素执行 minAreaRect 以获得标签。但是,正如您在阈值图像中看到的那样,图像顶部还有很多白色背景,这会使结果无用
  • 可能首先抛出一个文本检测方法。 -- 我也想知道那些二维码是不是一直都在。你还没有回答那个问题。 ——什么是“盲文”? ——为什么这张图片剪得这么近?标签的角被切掉。
  • 不幸的是,tesseract 文本检测仅在文本正确倾斜时才有效。或者是否有一种文本本地化方法也适用于倾斜文本?我对此进行了一些研究,但找不到任何东西

标签: python opencv ocr tesseract python-tesseract


【解决方案1】:

您可以尝试基于深度学习的natural scene text detection 方法。使用这些方法,您可以获得每个文本的旋转边界框。基于这些获得覆盖所有框的旋转边界矩形。然后使用该矩形的 4 个角来校正图像。

RRPN_plusplus

基于示例图像RRPN_plusplus 似乎在极端角度上做得很好。

Pyimagesearch 有一个使用 EAST 场景文本检测器的教程。虽然不确定东方在极端角度下是否会做得很好。

https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/

图片来自https://github.com/argman/EAST

这些应该可以帮助您找到最近更好的存储库和方法,

【讨论】:

    【解决方案2】:

    您可以使用快速的跨平台命令,例如

    deskew32 -o out1.png -a 20 -f b1 -g c Sdgqm.png

    或者对于更复杂的情况,结合 dewarp,但需要第三步,因为自动阈值不是上限和下限 dewarping mmrnt.png square.png 0 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 2021-02-14
      • 1970-01-01
      相关资源
      最近更新 更多