如何判断图片是否需要旋转

How to determine if an image needs to be rotated

我正在尝试找到一种方法来确定是否需要旋转图像以使文本水平对齐。如果确实需要旋转多少度?

我正在将图像发送到 tesseract,为了使 tesseract 有效,图像中的文本需要水平对齐。

我正在寻找一种不依赖图像中 "Orientation" 元数据的方法。

我想到了以下方法:

  1. 将图像顺时针旋转90度四次,并将四张图像全部发送到tesseract。这并不理想,因为需要将一张图像处理 4 次。
  2. 使用霍夫线变换来查看线条是垂直的还是水平的。如果它们是垂直的,则旋转图像。这样图像仍然可能需要旋转 180 度。所以我不确定这会有多有效。

我想知道是否有其他方法可以使用 OpenCV、imageMagik 或任何其他图像处理技术来完成此操作。

如果您有 1000 张水平或垂直图像,您可以将这些图像调整为 224x224,然后针对此任务微调卷积神经网络,例如 AlexNet 或 VGG。如果你想知道图像右转多少次,你可以将标签设置为顺时针旋转的次数,比如0,1,2,3。

http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html

在所有 4 个方向上进行 Aytempting ocr 似乎是一个合理的选择,我怀疑您会找到更可靠的启发式算法。

如果速度有问题,您可以先对图像的一小部分进行 OCR。 Select 一个矩形区域,具有适当数量的边缘像素和 white/black 文本比率,然后将其发送到不同方向的 tesseract。对于小区域,您甚至可以尝试比 90° 更小的步长,或者将其与其他启发式方法(如 Hough)结合使用。

如果您根据之前的图像记住最可能的方向,并在 tesseract 成功处理一个方向后停止,那么在大多数情况下您甚至不必尝试大多数方向。

您可以使用 tesseract 的 psm 选项在终端中解决这个问题。

tesseract --psm 0 "infile" "outfile" 将创建 outfile.osd,其中包含以下信息:

Page number: 0
Orientation in degrees: 90
Rotate: 270
Orientation confidence: 27.93
Script: Latin
Script confidence: 6.55

man tesseract

...       
--psm N
           Set Tesseract to only run a subset of layout analysis and assume a certain form of image. The options for N are:

               0 = Orientation and script detection (OSD) only.
               1 = Automatic page segmentation with OSD.
               2 = Automatic page segmentation, but no OSD, or OCR. (not implemented)
...