使用Python对带背景的图像进行去斜处理

3
我正在一个项目中工作,需要对标签上的文字进行OCR。我的任务是将图像校正,使其可以被tesseract识别。

this one

我一直在使用这种方法,它将图片转换为灰度并进行阈值处理,获取黑色像素的坐标,围绕其绘制一个最小矩形,并通过该矩形的倾斜角度来校正图像的倾斜。这在blindtext images上有效,但对于有背景的图片(如所呈现的图片)则无效。在那里,它计算出了0.0的倾斜角度,没有旋转图像。(期望结果:17°)

black pixels in the background

我怀疑这是因为背景中有黑色像素。由于它们,minAreaRect会围绕整个图片,从而导致倾斜角度为0。
我尝试过背景去除,但找不到足够好的方法,只留下带有文本的标签。
我尝试了另一种方法,即通过k-means聚类来聚集像素。但即使手动选择一个好的k值,包含文本的聚类仍然包含部分背景。

See here.

更不用说我还需要另一种方法,遍历所有聚类并使用某种启发式方法来确定哪个聚类是文本,哪个是背景,这将耗费大量运行时间。
如何最好地校正具有背景的图像?

2
那些标签上面的二维码会一直存在吗? - Dan Mašek
你不能只是在白色上进行阈值处理来获取标签吗?然后获取标签内文本周围的区域,或者使用你参考代码中的方法将背景也变成白色,然后对该标签进行去斜校正。 - fmw42
我不明白你所说的阈值处理白色是什么意思,能否详细说明一下?根据我的理解,你的建议是对白色像素执行minAreaRect以获取标签。然而,正如您在阈值图像中所看到的,图像顶部还有很多白色背景,这将使结果无用。 - Imogenio
2
也许首先可以使用文本“检测”方法。-- 我还想知道那些QR码是否总是在那里。你还没有回答这个问题。-- 什么是“盲文”?-- 为什么这张图片被裁剪得这么紧?标签的角落被切掉了。 - Christoph Rackwitz
不幸的是,Tesseract文本识别只适用于正确偏斜的文本。是否有一种文本定位方法也适用于倾斜的文本?我进行了一些研究,但没有找到任何信息。 - Imogenio
@DanMašek 不一定。 - Imogenio
2个回答

4
你可以尝试基于深度学习的自然场景文本检测方法。使用这些方法,您可以为每个文本获取旋转边界框。基于这些获取旋转边界矩形覆盖所有框。然后,使用该矩形的4个角来校正图像。
RRPN_plusplus
根据样本图像RRPN_plusplus,似乎在极端角度上表现良好。

enter image description here

EAST

Pyimagesearch有一个关于EAST场景文本检测器的教程。虽然不确定EAST在极端角度下是否表现良好。

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

enter image description here

图片来源,https://github.com/argman/EAST

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接