手写数字识别系统之倾斜矫正

2016-08-01 ruki 更多博文 » 博客 » GitHub »

手写数字识别 神经网络 倾斜矫正 图像处理

原文链接 https://waruqi.github.io/2016/08/01/hnr-correct-slope.cn/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


简介

倾斜校正主要有两种,一种是整体倾斜校正,另一种是局部倾斜校正。

由于本文主要研究具有不规则分布的多数字识别,因此只需要关注经过提取后的数字校正问题,也就是图像的局部校正。

矫正算法

目前的校正算法有很多,比如说:

对于整体倾斜校正可以采用统计图像左右两边的平均像素高度,通过计算整体倾斜度来进行校正。

这种方法对于像素较多的图像的处理效果明显,而且实现简单快速,但是对于那些已经经过提取得单一数字图像并不适用,因为此时的图像一般较小,且笔画较细,由于所需信息太少统计后的结果并不正确。

其实校正的核心就是使图像的倾斜度的接近为0,因此可以把它看作是一个最优化问题:

即寻找需要调整多少角度,才能使图像的倾斜度最小,可见倾斜度决定了最终图像的好坏,考虑的数字的特征,都是具有狭长的特点,我们可以考虑将图像的高宽比最为图像倾斜度的依据。

而到底需要调整多少才合适呢,本文所采用的方法,并不估算图像的倾斜度,而是通过二分搜索的思想,在倾斜45度的范围内进行二分查找,寻找最佳调整点,使其结果近似最优,其具体步骤如下:

1. 设置最大调整角度,一般倾斜度不会超过45度,如果超过调整也就没有意义了。
2. 计算图像高宽比,也就是倾斜度,如果倾斜度比上次的有所减小,则调整角度减半,继续搜索,如果倾斜度趋于稳定,则退出查找,并使用此时的调整角度进行调整。
3. 对于实际的调整过程,一般会选择进行旋转变换操作,比较简单,但是考虑到实际人们书写数字时的倾斜往往并不是旋转造成的,而是可能姿势不正而引起的侧斜,因此仅仅通过旋转并不能达到较好的效果,因此可以通过水平侧向校正来实现,即保持像素点的高度不变,仅仅通过调整水平位置,进行适当的调整。

实验结果

correct_slope

总结

可见,对于大多数数字图像的校正结果还是令人相当满意的,但还是会有些许不足:

由于侧向拉伸会导致图像的变形,因此对于较为细长的图像的处理效果较差,可能会出现断层这些破坏连通性的情况。

为了解决此类问题,可以在校正前先进行适当的膨胀运算操作,这样效果会好些。