如何检测图像方向(文本)

时间:2010-04-01 09:56:41

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

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

任何建议都非常感谢!

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

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

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

我甚至对组织doc是横向或纵向时的简化解决方案感兴趣(我注意到大多数横向文档都需要顺时针旋转)

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

4 个答案:

答案 0 :(得分:3)

您可以执行快速傅里叶变换(FFT)将空间图像转换为频率/角度表示。然后找出频率最突出的角度。这听起来很复杂,但它并不那么难,它非常有效,实际上它可以同时测试每个可能的角度,而不是仅适用于特定角度的硬编码黑客。使用像“数字配方”和“FFT”等搜索词搜索示例实现。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

但即使检测到这些也不是直截了当的,您需要使用某种过滤器,如SobelPrewitt。它们都有横向和纵向版本,see here以获取更多信息。

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

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

答案 3 :(得分:2)

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

的论文

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

  

提出的方法背后的基本思想很简单。

     

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

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