2010-04-01 79 views
7

我的程序正在将传真文档作为单独的位图存储
我不知道是否有办法自动检测页面方向(垂直或水平)以便按照正确的顺序显示用户的图像预览(意思是必要时旋转)如何检测图像方向

任何建议非常感谢!

编辑:澄清:
当Faxmachine收到多页文档节省每一页作为单独的TIFF文件。
我的应用程序内置查看器显示这些文件。所有文件都扩展到A4幅面,并保存为TIFF(所以没有变化来检测由高度/宽度参数方向)
我的浏览器默认显示在纵向模式下图像

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

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

我甚至有意简化的解决方案检测时组织文档是横向还是纵向(我注意到大部分景观文档的需要顺时针旋转)

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

+0

请说明。您的意思是说,您有一组混合了纵向和横向文本页面的图像,并且您想要分析图像以确定如何旋转文本以使文本正确显示?据推测,实际上有4种可能的方向,因为原稿可能已被“颠倒”扫描。 – e100 2010-04-01 10:53:24

回答

2

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

+0

我遵循这种方式。我已经为C#使用了Teseract .NET免费的OCR库。只要得到最佳的百分比,就可以旋转文档。 – Maciej 2011-05-04 09:53:52

2

我不知道是否有一些文本属性可以用来帮助你做到这一点。例如基于快速浏览,文本(l,j,k,m,n等)中的垂直线比水平线多得多,所以也许你可以从这开始。

但即使检测到这些并不简单,您需要使用某种过滤器,如SobelPrewitt。它们都有水平和垂直版本,see here有关更多信息。

当然,excel电子表格的垂直/水平线将是最强的边缘,所以你必须忽略这些并只看文本。

备选方案:您不仅可以让用户轻松旋转图像,就像Windows图片浏览器中的箭头一样,或者只显示4个可以点击的缩略图预览。您可能需要缓存4个版本(如果您正在旋转),所以速度很快,但只有在速度变成问题时才可以。

3

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

2

这里有一个名为“Combined Script and Page Orientation Estimation using the Tesseract OCR engine” [PDF]

我一直没能找到工作的实现,但这种方法对我来说很好纸:

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

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

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

+0

与Catdirt类似 – Maciej 2011-05-04 13:50:30