本帖最后由 hgl 于 2017-9-21 15:00 编辑
在图像处理中,有一个很重要的部分就是图像分割,这也是机器视觉中对图像做的最基础的处理,图像分割的方法有基于阈值的图像分割、基于边界的图像分割、基于区域的图像分割和基于二值数学形态学方法的分割,在基于阈值的图像分割方法中又有固定阈值法、直方图法、最大类间方差法和统计最优阈值法。在这里选用最大类间方差法进行图像分割,最大类间方差法是一种比较典型的图像分割方法,也称为Otsu分割法,是由Otsu于1978年首先提出来的。
它的原理从模式识别的角度看,最佳阈值应当产生最佳的目标类与背景类的分离性能,此性能用类间方差来表征,一维最大类间方差法可以描述如下: 假定某一阈值T将图像各像素按灰度分成两类C0和C1,C0类包含灰度级为[0,1,…,z]的像素,每个灰度级的概率为Pi,C0类的概率和为 ,C0类的数学期望为 ,其均值为 。C1类包含灰度级[z+1,z+2,…,K-1]的像素,其概率和为 ,C1类的数学期望为 ,其均值为 。图像的总平均灰度为μ=ω0μ0+ω1μ1,则定义类间方差为:
从最小灰度值到最大灰度值遍历所有灰度K,使得上式中σ最大时的z即为分割的最佳阈值T,因为方差是灰度分布均匀性的一种度量,方差越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此,使类间方差最大的分割意味着目标和背景被错分概率最小。
上面的一维Otsu分割法在进行阈值分割时只考虑了像素的灰度信息,没有考虑像素的空间信息,而后来扩展到二维空间后,二维Otsu分割法充分利用了像素与其领域的空间相关信息。
下面结合SimpleCV中的binarize()函数进行图像的二值化分割,这个函数利用Otsu算法来进行图像分割,但也可以使用0-255之间的数作为自定义阈值。
下边对Lina图进行阈值分割,原图如下:
先使用Otsu默认的分割阈值进行分割,代码如下:
运行结果如下:
然后分别设一个低一点的阈值和高一点的阈值,代码如下:
运行结果如下:
图中左上角为原图,右上角为Otsu算法分割后图像,左下角为低阈值分割图像,右下角为高阈值分割图像,从图中可以看出有明显差别,且使用Ostu算法分割后的效果最好。
|