【问题标题】:How to detect image orientation (text)如何检测图像方向(文本)
【发布时间】:2011-02-03 07:26:25
【问题描述】:

我的程序正在处理存储为单独位图的传真文档
我想知道是否有一种方法可以自动检测页面方向(垂直或水平),以正确的顺序为用户显示图像预览(如果需要,意味着旋转)

非常感谢任何建议!

编辑:澄清:
当传真机接收多页文档时,它会将每一页保存为单独的 TIFF 文件。
我的应用程序具有显示这些文件的内置查看器。所有文件都缩放为 A4 格式并以 TIFF 格式保存(因此通过高度/宽度参数检测方向没有变化)
我的查看器默认以纵向模式显示图像

我想做的是自动检测以横向模式打印组织文档时的情况(例如宽 Excel 表格),然后我想为最终用户显示旋转预览以加快预览过程

显然有 4 种可能的传真方向纵向/横向 x 2 种旋转。

我什至对检测 org 文档是横向还是纵向的简化解决方案感兴趣(我注意到大多数横向文档需要顺时针旋转)

EDIT2:创意
我认为这可能是一些想法:
如果我可以绘制水平线和垂直线并检查线是否没有切割任何(黑色)点。然后我们可以比较哪些是更多类型的线条(水平或垂直)以及他对页面方向的决定。
你怎么看?

【问题讨论】:

  • 请澄清。您的意思是您有一组混合了纵向和横向文本页面的图像,并且您想要分析图像以确定需要如何旋转它才能使文本正确显示?考虑到原件可能已经“倒置”扫描,大概实际上有 4 种可能的方向。

标签: c# .net image image-processing bitmap


【解决方案1】:

为此,您需要 OCR。滚动你自己的 OCR 会有点困难,但可能有图书馆或其他值得研究的东西?此外,即使具有良好的 OCR,它也不是 100% 可靠的解决方案。

【讨论】:

  • 我就是这么走的。我已经为 C# 使用了 Teseract .NET 免费的 OCR 库。旋转文档,只要获得最佳百分比。
【解决方案2】:

我想知道是否有一些文本属性可以帮助你做到这一点。

例如,基于快速浏览,文本中的垂直线(l、j、k、m、n 等)比水平线多得多,所以也许你可以从这个开始。

但即使检测到这些也不是很简单,您需要使用某种过滤器,例如 SobelPrewitt。它们都有横向和纵向版本,see here 了解更多信息。

当然,Excel 电子表格的垂直/水平线将是最强的边缘,因此您必须忽略这些并只查看文本。

替代方案:您能否为用户提供一种简单的方法来旋转图像,例如 Windows 图片查看器中的箭头,或者只显示 4 个他们可以单击的缩略图预览。您可能需要缓存 4 个版本(如果您正在旋转),这样它会很快,但前提是速度会成为问题?

【讨论】:

    【解决方案3】:

    您可以执行快速傅立叶变换 (FFT) 将空间图像转换为频率/角度表示。然后找到频率最突出的角度。这听起来很复杂,但并不难,它非常有效,实际上它一次测试了所有可能的角度,而不是只适用于特定角度的硬编码黑客。使用 Numerical Recipes 和 FFT 等搜索词搜索示例实现。

    【讨论】:

      【解决方案4】:

      这是一篇题为“Combined Script and Page Orientation Estimation using the Tesseract OCR engine”[pdf]的论文

      我无法找到他们工作的实现,但这种方法对我来说看起来不错:

      建议的方法背后的基本思想很简单。

      形状分类器根据所有感兴趣的脚本中的字符(类)进行训练。在运行时,分类器在图像中的每个连接组件 (CC) 上独立运行,并且在将每个 CC 旋转到其他三个候选方向(与输入方向成 90°、180° 和 270°)后重复该过程。

      该算法跟踪给定方向的每个脚本中的估计字符数,以及所有候选方向的累积分类器置信度分数。页面方向的估计被选为累积置信度得分最高的那个,而脚本的估计被选为该脚本中字符数最多的那个,以获得最佳的方向估计。

      【讨论】:

      • 链接失效
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 2016-09-06
      • 2011-02-05
      • 2016-01-03
      • 2014-12-23
      相关资源
      最近更新 更多