如何识别扫描图像中的文本存在模式并进行裁剪?

时间:2012-10-07 06:16:30

标签: image-processing imagemagick photoshop photoshop-cs4

扫描文档的智能裁剪

最近我接手了旧书/手稿的保存项目。它们数量巨大,近10,000页。我不得不用便携式扫描仪手动扫描它们,因为它们不能在自动书籍扫描仪中扫描。

当我开始在Photoshop中编辑它们时,真正的问题出现了。请注意,它们都基本上是文档(JPG格式),并且这些文档中绝对没有图像。它们使用不同的语言(Oriya),我相信在不久的将来不会有任何OCR软件可用。 (如果有,请告诉我。)

为了使这些图像(文档)看起来干净而优雅,我必须裁剪它们,定位它们,稍微增加对比度,用橡皮擦清洁不必要的斑点,等等。我能够在Photoshop中自动化大多数这些过程,但裁剪是我遇到困难的地方。我无法自动裁剪,因为软件无法在img(doc)的某个区域中重新识别文本或内容的存在;它只是应用赋予它的值进行裁剪。

我想要一个解决方案来自动化这个裁剪过程。我已经想到了这个想法,我不知道它是否足够实用,据我所知,市场上还没有软件能够做到这一点。

可能的解决方案:如果工具可以识别图像中文本的存在(这不是非常关键,因为它们都是普通文档图像,其中没有图像,没有图案只是普通矩形),这可能是可能的。并从每侧的文本边框裁剪出来,这样它就可以输出没有任何边距的文档图像。其余的任务可以使用Photoshop自动完成,例如为边距添加空格,使用对比度和颜色进行调整,使其更具可读性等。

这是图库的相册链接。我可以发布更多样本图片,如果它有用 - 请告诉我。

  

http://imageshack.us/g/1/9800204/

以下是通过以上链接提供的更大图像样本中的一个示例:

one example of a bigger set...

3 个答案:

答案 0 :(得分:11)

使用来自tinypic的样本, original scan

使用ImageMagick

我按照以下几行构建算法:

  1. 对比拉伸原始图像

    黑点的值为1%,白点的值为10%。

    <强>命令:

    convert                               \
       http://i46.tinypic.com/21lppac.jpg \
      -contrast-stretch 1%x10%            \
       contrast-stretched.jpg   
    

    <强>结果: contrast-stetched result

  2. 剃掉一些边框像素以摆脱那里的黑暗扫描伪影

    每条边上30像素的值似乎是正确的。

    <强> 命令:

    convert                   \
       contrast-stretched.jpg \
      -shave 30x30            \
       shaved.jpg   
    

    <强> 结果: 30 pixels shaved off each edge

  3. 去除图像

    此处没有其他参数。重复3x过程以获得更好的结果。

    <强> 命令:

    convert       \
       shaved.jpg \
      -despeckle  \
      -despeckle  \
      -despeckle  \
       despeckled.jpg
    

    <强> 结果: despeckled image

  4. 应用阈值以使所有像素为黑色或白色

    大约50%的值似乎是正确的。

    <强> 命令:

    convert           \
       despeckled.jpg \
      -threshold 50%  \
       b+w.jpg
    

    <强> 结果: black+white image

  5. 重新添加剃掉的像素

    使用identify -format '%Wx%H' 21lppac.jpg确定原始图片的尺寸为1536x835像素。

    <强> 命令:

    convert            \
       b+w.jpg         \
      -gravity center  \
      -extent 1536x835 \
       big-b+w.jpg
    

    <强> 结果: original size (注意,此步骤仅是可选的。它的目的是回到原始图像尺寸,如果您从这里开始并将结果与​​原始图像重叠,您可能需要这样做,或者其他......)

  6. 取消图像

    此阈值为40%(默认值)似乎也适用。

    <强> 命令:

    convert        \
       big-b+w.jpg \
      -deskew 40%  \
       deskewed.jpg
    

    <强> 结果: deskewed image

  7. 从每个边缘删除所有纯白色像素的行和列

    只需使用-trim运算符即可实现。

    <强> 命令:

    convert         \
       deskewed.jpg \
      -trim         \
       trimmmed.jpg
    

    <强> 结果: trimmed image

  8. 正如您所看到的,结果还不完美:

    • 在图像的下边缘仍然存在一些随机伪像,

    • 由于其他最小的伪影,最终修剪并未从边缘移除所有空白区域;

    • 此外,我还没有尝试对图像应用失真校正以修复(部分)失真。 (通过查看"Understanding Perspective Projection Distortion ImageMagick"的答案,您可以了解它可以实现的目标。)

    当然,通过使用每个步骤中使用的一些参数,您可以轻松获得更好的结果。

    当然,您可以通过将每个命令放入shell或批处理脚本来轻松实现此过程的自动化。


    更新

    好的,所以这里有一种扭曲来粗略地纠正变形。

    <强> *命令:

    convert                                                                         \
       trimmmed.jpg                                                                 \
      -distort perspective '0,0 0,0  1300,0 1300,0  0,720 0,720  1300,720 1300,770' \
       distort.jpg
    

    结果: (再次使用原版下方,使直接视觉比较更容易) un-distorted image original image

    图像中仍有一些样失真的部分,可以通过应用-barrelinverse运算符删除 - 我们只需找到拟合参数。

答案 1 :(得分:2)

从背景中分割文本的一种技术是笔划宽度变换。你会在Stack Overflow上找到几篇关于它的帖子,包括这一篇:

Stroke Width Transform (SWT) implementation (Java, C#...)

如果维基百科页面中显示的文字代表书面的Oriya,那么我相信SWT(或其定制版本)将表现良好。在查看图像后,您可能仍需要进行一些手动调整,但基于SWT的方法应该为您完成大量工作。

虽然SWT可能无法识别每个笔划,但它应该可以很好地估计笔划(和字符)所占空间的尺寸。最简单的方法

可能适合您的新算法是“内容感知调整大小”算法,例如“缝线雕刻”,其自动移除低信息内容(例如背景像素)的像素路径。这是关于接缝雕刻的视频:

http://www.youtube.com/watch?v=qadw0BRKeMk

GIMP有一个接缝雕刻插件(“液体大小调整”): http://liquidrescale.wikidot.com/

此博客文章报告了一个Photoshop插件: http://wordpress.brainfight.com/195/photoshop-cs5-content-aware-aka-seam-carving-aka-liquid-resize-fun-marketing/

有关OCR技术的概述,我推荐Cheriet,Kharma,Liu和Suen的书角色识别系统。那本书中的参考文献可以让你忙碌很长一段时间。

http://www.amazon.com/Character-Recognition-Systems-Students-Practitioners/dp/0471415707

最后,考虑加入LinkedIn上的光学字符识别小组,发布更具体的问题。业内有学者,研究人员和工程师可以非常详细地回答问题,您也可以通过电子邮件与印度的研究人员进行联系,他们正在为类似于Oriya的语言开发OCR,尽管他们可能尚未发布该软件。

答案 2 :(得分:2)

我们在开源DjVu->PDF转换器中解决了许多“智能裁剪”问题。转换器还允许您加载一组扫描图像而不是DjVu(只需按下带有打开命令的SHIFT)并输出一组结果图像而不是PDF。

它是一个免费的跨平台GUI工具,用Java编写。

image converter, smart crop and deskew