这一篇学习图像阈值分割,图像分割是一个经典的图像处理问题,是图像理解和识别的前提基础,在模式识别、计算机视觉、医学图像处理等领域中有着广泛的应用。其主要目的是将感兴趣目标从复杂背景区域中提取出来,以便进行目标识别和分析。
阈值分割技术是一种非常重要的图像分割技术,它以其简单、有效、便于理解的特性而得到了广泛的研究与应用。
当背景和前景的灰度分布差异很明显的时候(如上图1图3),可以用单个阈值处理图像。在多数应用中,通常图像之间存在较大的变化,即使可以用全局阈值方法也需要对每幅图像自动估计出一个合适的阈值。
例如上图3指纹识别,需要把指纹纹理从背景里面給分割提取出来,那么这里介绍一个基本的自动阈值方法:
平均阈值法比较适用于:源图像的直方图存在一个相对清晰的波谷,这简单的算法会工作得很好。
接着再介绍另外一个阈值算法,Otsu算法,也叫最大类间方差法,是1979年由日本学者大津提出的,是一种自适应阈值确定方法,是一种全局的二值化算法。
它是根据图像的灰度特性,把图像区分为前景和背景两部分。当取最佳阈值时,两部分之间的差别应该是最大的。在Otsu算法中采用的衡量差别的标准就是较为常见的 最大类间方差。前景和背景之间的类间方差如果越大,就说明构成图像的两个部分之间的差别越大。 当部分目标或者背景被错分了,都会导致两部分的差别变小。 当所取阈值的分割使类间方差最大时,就意味着错分概率最小。
首先我们假设输入图像是M*N的大小,有L个灰度等级。小n表示灰度等级对应的像素个数,p表示灰度概率函数,也可以是归一化的直方图分量。选择灰度阈值T(k)[k表示T所在的灰度等级,0<k<L] 把图像分为两个集合 C1和C2。
如上分别计算C1和C2 集合当中的概率P1和P2(两者之和为1),平均灰度值m1和m2,其中m1*p1 + m2*p2 等于整幅图像的平均灰度值 mG。
Otus算法求得的最佳阈值,根据的标准是最大类间方差法,其定义如上,与全局方差的区别就是,方差值被分为了两部分(集合C1和C2),最终类间方差被定义为
P1·P2· (m1-m2)²
根据公式分析:我们要最大化类间方差,那么我需要使得m1-m2的差值最大,也就是说c1和c2两类(均值)之间的差异变大,灰度分布相差就越远。我还可以尽可能的提高P1·P2乘积(P1+P2=1),也就是说尽量使得P1=P2=0.5,意思就是说尽可能的使得集合C1和C2具有相同多的像素点个数,使得被分割后的两块区域越均衡越好。
计算Otsu最佳阈值,一般使用最终的变形式,步骤如下:
对所有灰度取整[0,255]计算类间方差,选取使得类间方差最大的K值作为最佳阈值。为了评价阈值k的质量,可以采用 阈值k的类间方差 / 全局方差,这样一个无量纲数值进行一个可分割性测度,进行一个质量的评判。
结合实际的例子再进行学习说明:图a是一张输入灰度图像,有着一个偏暗的背景和更亮的前景,但它里面存在高斯噪声,我们看到其直方图是成连续的,对于这样的图像如果直接使用所学的平均阈值法 / Otsu算法计算其阈值进行分割,效果如图c所示并不理想。
如果在阈值分割前,先用滤波算法进行平滑处理得到图d,平滑完以后得到一个有着清晰波谷的直方图,然后我们在应用这个平均阈值法 / Otsu算法,就能得到图f,分割效果得到了明显的提升。
但这个去噪处理也并不是万能的,比如上图的一个案例。输入图像a它的背景灰度是整体偏暗的,计算其直方图图b,显然只有一个单峰,因为它的背景占据了大部分像素,然后用otsu算法进行分割,效果如图c;
此时如果还继续使用滤波算法进行平滑处理,得到的直方图是更尖锐的,继续使用otsu算法效果更糟糕。这里失败的主要原因是,otsu算法的算法定义有个P1·P2,对于两类目标的数量 / 面积是差不多的情况下,可以取得比较好的效果。而这里的情况就不适合otsu算法进行一个阈值的分析。
到现在为止otsu算法是把输入图像分成前景和背景两类,从公式上来说只有两部分的类间方差参与计算。其实从数学推理上来说,也很容易扩展多个类别的情况。
上面是以三个类别的情况为例,来说明这个扩展的思路。三个类别的部分则需要两个灰度阈值,其计算流程和单阈值的情况是一样的。两个阈值的情况下,搜索的维度就会比单阈值的情况要复杂得多,显然如果要实现全自动的推算阈值,则需要更大的计算量。
一般情况下我们需要结合预处理后的直方图(平滑降噪),找出直方图中清晰波谷的灰度值,标定其大致的阈值,控制其阈值变化的范围,再进行otsu阈值分割的计算,分析不同阈值组合间的可分割性测度。