计算机视觉|机器视觉|机器学习|深度学习
编者荐语
随着移动摄像终端数量剧增,随手拍照已成为一种对文档进行数字化记录的普遍方式,由于手持移动设备摄像的特殊性,文本成像常存在多种类型的形变叠加,这不可避免对文本图像识别造成极大干扰。
提醒:文末送书《OpenCV图像处理入门与实践》!
Requirements:
scipy
OpenCV 3.0 or greater
Image module from PIL or Pillow
前言
二十世纪六十年代兴起的OCR(Optical Character Recognition,光学字符识别)技术,使得文档能以图像的形式被分析与识别,一定程度上实现了文本识别的自动化。然而,文档图像识别效果的优劣与其质量有着密切的联系,其中几何质量更为重中之重。随着移动摄像终端数量剧增,随手拍照已成为一种对文档进行数字化记录的普遍方式,由于手持移动设备摄像的特殊性,文本成像常存在多种类型的形变叠加,这不可避免对文本图像识别造成极大干扰。因此,文本图像的畸变矫正一直是伴随着OCR的一个重点研究方向。
最近发现了一篇很有意思的关于页面扭曲矫正的内容,为了让大家有一个相关的概念,下面先预览一下效果图。
页面扭曲矫正的原理
作者写这篇文章的目的也很有意思,因为作者的妻子是一个老师,她的学生经常要发一些图片的作业给她,但是难免由于拍照技术和条件等各种原因,导致批改作业的难度提升,因此作者为了他的老婆,做出来了这一套方案。(爱的魔力)。
对于一些经典的文本矫正的思路(例如Leptonica dewarping method 和 the CTM method)将问题分解为:
1. 将文本分成几行线
2. 找到使得线平行和水平的映射或坐标变换
本文作者同样采用了类似的思路,构建了一个参数模型用于页面(文本)的矫正,模型主要考虑的参数:
页面在三维空间中的旋转向量 r和平移向量 t
指定页面表面的两个曲率 α and β
页面上n个水平跨度的垂直偏移
对于每个跨度,水平跨度中 m个点的水平偏移量
对于上面的一些参数,本人的理解是页面扭曲存在这旋转和偏移的变换,因为把文本内容分成几行,因此将每一行文本看成是一条曲线,这里假设扭曲后变成三次样条曲线,由两个系数 a 和 b 控制。垂直偏移是指分割后的每行之间的距离,水平偏移是指对每条线上设置点,用于后续的矫正变换处理。
接下来的操作就非常牛了,作者通过对页面进行模拟,设置不同参数用于观察其中的规律
最后作者发现当设置的参数固定后,页面上的每个关键点都能在图片的平面内找到确定的对应点。
红色的是文本上检测到的关键点,蓝色的是通过模型的重投影的点。左图的蓝色点都是共线的(假设一开始文本是直线的),而右图是将确定页面的姿态/形状,使得蓝色点几乎上红色点上。
实现的细节
上面是大致的实现原理,接下来是作者实现功能的主要步骤:
1、获取页面的边界。这里并不是采用整幅图去处理,而是非常的巧妙采用内部文本内容以及文本与边界大致距离去确定页面的边界。
2、检测文本的轮廓。通过自适应阈值——> 膨胀+腐蚀——> 连通区域分析+PCA来近似文本
3、将文本组成跨度。
4、样本跨度。在每个跨度上生成代表性点。
5、创建初始参数估计。实现投影到图片平面内。
6、优化!使重投影的误差变小
7、重新映射图片和阈值。
总结
对于这种页面扭曲校正,百度搜索出来的相关内容不多,这篇文章写的比较仔细,具体的实现步骤也很清晰,便将它分享出来,对于内容的理解由于本人水平有限,可能会存在一定的偏差,如有错误欢迎大家在留言区批评指正,以免误导更多的同学。
该项目使用起来并不复杂,但是由于作者尽针对这种已知的问题进行处理,对于其他情况的文本,以及变形过大的矫正效果可能并不理想。
参与评论
登录后参与讨论 0/1000