Mat*_*rin 8 python ocr image-processing
我正在根据历史记录创建一个数据库,我从书本上拍摄了一页(+ 100K页).在OCR每个页面之前,我写了一些python代码来进行一些图像处理.由于这些书中的数据没有格式良好的表格,我需要将每个页面分成行和列,然后分别对每个页面进行OCR.
其中一个关键步骤是对齐图像中的文本.
我找到的解决方案是水平涂抹文本(我正在使用skimage.ndimage.morphology.binary_dilation)并找到沿水平维度最大化白色像素总和的旋转.
这样可以正常工作,但每页大约需要8秒钟,因为我使用的页面数量太多了.
您是否知道更好,更快的方式来完成对齐文本?
我使用scikit-image进行图像处理功能,并使用scipy来最大化沿水平轴的白色像素数.
这是我用来处理这个问题的Jupyter笔记本的html视图的链接.代码使用了我为此项目编写的模块中的一些函数,因此无法单独运行.
链接到笔记本(dropbox):https://db.tt/Mls9Tk8s
这是原始图像(dropbox)的链接:https://db.tt/1t9kAt0z
Nik*_*iki 17
前言:我没有用python做过多的图像处理.我可以给你一个图像处理建议,但你必须自己用Python实现它.你所需要的只是一个FFT和一个极化变换(我认为OpenCV有一个内置功能),所以这应该是直截了当的.
您只发布了一个样本图像,因此我不知道其他图像是否也能正常工作,但对于此图像,傅立叶变换非常有用:只需将图像填充到2的良好幂(例如2048x2048)你会得到这样的傅里叶谱:
我已经张贴傅里叶变换的直观的解释变换位置,但在短:你的图像可以被表示为一系列正弦/余弦波的,而且大多数"波"是平行或垂直于文档的方向.这就是为什么你会在大约0°,90°,180°和270°处看到强烈的频率响应.要测量精确的角度,您可以采用傅里叶谱的极坐标变换:
并简单地采取列方式:
该图中的峰值位置为90.835°,如果我将图像旋转-90.835模90,则方向看起来不错:
就像我说的,我没有更多的测试图像,但它适用于图像的旋转版本.至少它应该缩小搜索空间以获得更昂贵的搜索方法.
注1:FFT速度很快,但显然需要更多时间才能拍摄更大的图像.遗憾的是,获得更好的角度分辨率的最佳方法是使用更大的输入图像(即在源图像周围使用更多的白色填充.)
注2:FFT实际上返回的图像中"DC"(上面的光谱图像中心)位于原点0/0.但是如果将它移动到中心,旋转属性会更清晰,并且它使极坐标变换更容易,所以我只显示了移位版本.