图像算法能够能够取得比较好的效果十分依赖预处理做的好坏,这里介绍几种图像预处理的算法、
二值化
二值化是指将像素点的灰度值设置为0或者255的过程,使图像呈现明显的黑白效果。一方面可以减少数据的维度,另一方面可以通过排除原图中噪声带来的干扰,凸显轮廓信息,这种方法在OCR(文字识别)的任务中尤为重要。
全局阈值法
该方法是对输入的图形中所有的像素点统一进行固定阈值的。然后重构整个图像。
图下图的形式。
上图是原始的图片,经过不同阈值的二值化后,如下图显示。
局部阈值方法
相对于全局的阈值方法,局部阈值是指阈值随着环境的变化而变化,从而更大限度的提升灵活性。
自适应阈值方法
自适应阈值方法的主要思想是以一个像素为中心点设置s * s的滑动窗口。每次扫描对窗口内的像素求均值,设置为局部阈值。凡是大于这个阈值的就是255,否则就是0.
Niblack算法
Niblack算法同样是根据窗口内的像素值进行局部阈值的计算,不同的是Niblack不仅考虑区域内的像素的均值和方差,还考虑到用一个设定好的修正系数k来决定影响程度。
T(x,y)=m(x,y)+ks(s,y)
其中T(x, y)是阈值, m(x, y)和s(x, y)表示均值和方差。与 m(x, y)相近的像素点被判定为背景,否则是前景。相近程度由k来做决定,这样就能保证算法的灵活性。
Niblack问题
Niblack算法的缺陷一方面是在r * r的滑窗中会导致边界区域2r−1的像素范围内无法求阈值。
另一方面是在于如果r * r滑窗如果全是背景,那么该算法必然会使一部分像素为前景,形成伪噪声。因此r的选择十分关键,如果窗口太小不能抑制噪声,太大细节丢失。
Sauvola算法
Sauvola算法是针对文档二值化处理,在 Niblack算法的基础上进行了改进
T=m[1+k(Rs−1)]
其中R是标准方差的动态范围,若当前输入的是图像是8位灰度图像,那么R就是128.Sauvola算法在处理光线不均匀或者染色的图像比Niblack算法好很多。因为上面的公式适当的放大了标准差s的作用。
如果我们要处理一份浅色但是有污渍的文档,那么乘以m系数会降低背景区域的阈值的范围,可以有效的减少染色带来的影响。具体效果可以看下图。