基于角点检测的倾斜文档校正
扫描二维码
随时随地手机看文章
引言
随着科技发展和无纸化办公推行,许多纸质文档、书籍、期刊需要扫描生成数字文档,而扫描过程中难免会出现倾斜、旋转等问题而影响到阅读体验。现有文档旋转矫正算法主要有霍夫变换法、行间距特性法、投影特性法、傅里叶变换法等。但这些算法都具有较大运算量,其中霍夫变换法和行间距特性法对文档内容要求较为严格,投影特性法不仅计算量巨大而且其精度取决于不同角度投影测试的步长角度值。结合前人研究基础,针对扫描文档特点,基于无需借助光学仪器的前提,本文提出一种独立于文档内容的基于角点检测的倾斜文档矫正方法,算法流程如图1所示。
1图像预处理
图像预处理过程在本文算法中包含两个步骤一一滤波降噪和阈值分割。根据采集的图像特征以及后续处理的需要,本文采取中值滤波[3]的方法对图像进行处理,在图像的滤波算法中,中值滤波法消除噪声干扰的同时具有很好的保护图像边缘轮廓信息的特性,中值滤波是一种非线性滤波方法,中值滤波算法以某像素的领域图像区域中的像素值的排序为基础,用像素领域内灰度的中值代替该像素的值。假设二维数字图像(xi,j)经过中值滤波的结果为
。以3×3矩阵举例,假设矩阵,则根据中值滤波定义中间数字1滤波后用其邻域中值23替代,矩阵变换为,从而达到滤波降噪的目的。
图像二值化是图像处理的基本技术,在图像信息压缩、边缘提取、形状分析等方面起到非常重要的作用。其作用是将上一步得到的处理后的图像转换成黑白二值图像,从而使边缘轮廓更加清晰,更好地为后续处理服务。图像二值化的方法有很多种,本文采用基于直方图的全局阈值方法。方法步骤如下:
(1)获取图像直方图信息,如图2(a)所示。
(2)对直方图进行高斯平滑,如图2(b)所示。
(3)判定平滑后直方图是否具有两个波峰。
(4)取波峰之间的谷底值作为全局二值化阈值。
(5)采用选定阈值二值化,即阈值为5。
2角点检测
首先概括图像中角点所具有的特征:(1)角点是轮廓之间的交点:(2)对于同一场景,即使视角发生变化,通常具备稳定性质的特征:(3)该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化。角点检测算法基本思想是使用一个固定窗口(3×3或5×5等)在图像上进行任意方向上的遍历,比较遍历前与遍历后两种情况窗口中的像素灰度变化程度,如果在x、x方向上的遍历都有着较大灰度变化,那么我们可以认为该窗口中存在角点。本文采用Harris提出的角点检测方法,其算法原理为将窗口平移[y,u]产生的灰度变化。
式中,o(x,y)为窗口函数:向量(y,u)表示某个方向以及在该方向上的位移。
由上述公式可知,E(y,u)表示某个方向上图像灰度的变化。角点检测中要使E(y,u)值最大,就是说让方程右侧的第二
项取值最大。
由:
得:
记上式的结果为A,则可以得到:
其中M是2×2矩阵,可由图像的导数求得:
这里Ix和I.是图像在x和.方向的导数。它们根据一个用来判定窗口内是否包含角点的等式进行打分:
当入1和入2都小时,|R|也小,这个区域就是一个平坦区域:
当入1>入2或者入1<入2,R小于0,这个区域是边缘:
当入1和入2都很大时,R也很大(入1,入2中的最小值都大于阈值),说明这个区域是角点。
3角点提取
前一算法提出的角点以数组的形式存放,提取角点的目的是为了后续计算两点间直线以获得图像的倾斜角度。提取角点的过程中对角点编号,以便直线的连接。根据前面编号
选取2(x2,.2)、3(x3,.3)号角点连接直线段,计算直线夹角
4图像矫正和裁剪
本文仅应用图像矫正算法中图像旋转的部分,设点P0(x0,.0)绕原点(0,0)逆时针旋转9角度后对应点为P(x,.),则旋转前后对应点P0(x0,.0)、P(x,.)的坐标分别为:
转换为矩阵形式:
其逆运算为:
实际运算中如果绕原点旋转的话一般情况下会改变图像大小,旋转过程会造成内存泄漏、需要扩大显示范围等问题。所以,在实际当中会指定旋转中心进行坐标平移,扩大显示区域等。图像绕(a,b)点旋转则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图像平移回原来的坐标原点,这实际上是图像的复合变换[8]。如将一幅图像绕点(a,b)逆时针旋转9角度,首先将原点平移到(a,b),即:
然后旋转:
再平移回来:
综上所述,变换矩阵为T=C·B·A,至此图像旋转矫正完成,根据文本图像特性并考虑到阅读方便对文本区域进行裁剪,去除不需要的像素以便更好地阅读及使用。裁剪过程中要避免旋转过程影响裁剪精度,从而裁去需要的文本部分,以及避免较为复杂的裁剪区域计算,故选取角点旋转中心即角点2(x2,.2)为基准,以旋转前角点3和2之间距离L23为长、角点1和2之间距离L12为宽的矩形区域裁剪。其距离分别为:
5实验验证
本文算法基于Visualstadio2017C/C++模块开发,各步骤运行截图如图3所示。
载入原图(图3(a)),经过中值滤波及二值化(图3(b)),两次次中值滤波后去除文档内部瑕疵(图3(c)),角点检测,用颜色标记序号,并画出角点,连接直线(图3(d)),计算直线倾斜角,输出结果如图4(a)所示,旋转矫正如图4(b)所示,图像裁剪如图4(c)所示。
6 结语
本文在研究角点检测算法的基础上 ,将算法原理应用于 文档角点检测 ,其处理过程为角点检测 ,利用角点连线确定文 档倾斜角 ,然后对图像进行旋转矫正 ,最后裁剪无用的黑边 , 以提供更好的阅读体验。通过实验仿真可以看出 ,该算法不依 赖文档内容和文档形式 ,运算简单 ,所需时间短 ,算法可靠 ,鲁 棒性好。