一、计算方法
1)任务介绍
二值化处理是图像分割的一种简单方法。其实对图像进行二值化有点像机器学习里的分类问题,根据灰度等级这个特征,将大于阈值的每个像素归类到类别255当中,小于等于阈值的归类到类别0当中,那么这个阈值其实就是决策边界。
多种不同的二值化方法,区别就在于阈值的确定上,分为固定阈值和自适应阈值。比较常用的二值化方法则有:双峰法、迭代法和OTSU法等。
2)固定阈值
固定阈值的matlab实现非常简单,只需要令Img(Img > threshold) = 255以及令Img(Img <= threshold) = 0即可实现。
3)自适应阈值
该实验选择实现OTSU法,总体思想就是利用贝叶斯理论,找到一种分类结果,使得整幅图像像素分类误差最小化。阅读论文后,我觉得它的计算大致分为三个步骤:1)对灰度等级进行归一化:设整张图片中每个灰度等级i对应的数量为,令
等于
,其中N为总像素数;2)计算类间方差:论文中引入
作为当阈值设置为k时的判别度量,其中
,
,分别为灰度直方图的第0阶和1阶累计矩,
为整张图的灰度均值;3)根据类间方差最大化选择阈值,也就是求解最优化式子:
,直接遍历每个k,寻找最优值即可。
二、实验结果分析
分别对两张灰度图使用固定阈值的二值化操作,结果如下所示:
从结果中可以看出,如果将阈值设置的过低或者过高都将使得原图中的特征无法很好地被分割出来,而阈值100看起来效果还行,但是这意味着需要人工选择阈值,并且有时肉眼也很难选出最优阈值,这显然非常消耗人工成本,也不适用于端到端编程。
因此,我们需要使用一种方法自动地确定图像阈值,本实验中根据论文原文(Otsu, N., "A Threshold Selection Method from Gray-Level Histograms." IEEE Transactions on Systems, Man, and Cybernetics. Vol. 9, No. 1, 1979, pp. 62–66)实现OTSU算法。而OTSU算法其实就是用了方差分析的思想,因为二值化本质上是分类问题,那么通过阈值区分开的两个类别,类间方差应该越大越好,OTSU算法就是通过遍历每一个阈值,并计算对应的类间方差,选择其中类间方差最大的阈值作为整张图像的自适应阈值,就可以近似认为该阈值为根据全局灰度信息确定的最佳分割阈值。同样对两张灰度图处理如下:
lena图由OTSU算法确定的最佳阈值为117,而rice图为136,与之前设置的100相差还是挺大的。代码详见附录。
利用可分离性测度对二值化的结果进行评估,如下图所示,可以得出OTSU算法得出来的阈值较优。