图像阈值分割
有时间又可以写个博客了,由于本人水平所限,在论述中难免出现不妥之处,欢迎读者批评指正。另,所用图像皆为本人自写ppt中的截图。
图像分割在图像处理中重要程度不言而喻,而阈值分割又是图像分割中最简单最常用的方法。阈值分割原理很简单,如单阈值分割(二值化)就是使用一个阈值将图像像素分成两类:
![](https://img-my.csdn.net/uploads/201301/15/1358229970_4636.png)
当然,还有不常用的双阈值分割:
出于实际应用范围考虑,这里只讲述常用单阈值分割。下面我将从全局阈值分割和动态阈值分割两方面讲述图像阈值分割的方法。
全局阈值分割
当物体与背景的灰度分布十分明显时可以使用全局(单)阈值分割(即灰度直方图呈现良好的双峰型),
计算全局阈值常用方法有大律法(otsu)、迭代法等,这两种方法都是利用图像的灰度直方图计算分割阈值,特点是简单、快速,其具体细节将不会在这里描述,因为
我们重点要说的是全局阈值分割的改进策略。
先平滑再计算阈值
我们都知道平滑常应用在图像预处理中,目的是去掉一些图像细节如噪声等,实际上,噪声会影响图像灰度直方图的形状,进而影响阈值的计算,利用图像平滑去掉噪声,可改善直方图、增强分割效果。如下图所示,很容易看出平滑前后直方图的变化,良好的直方图显著地提高了阈值的合理程度。
使用边缘像素计算阈值
直方图统计不再使用图像中所有像素,而是仅考虑部分边缘像素,其中我们认为导数的绝对值大于某一阈值的像素是边缘像素,由新直方图(如果双峰型良好)计算阈值作为原图像分割阈值。如下图所示,(a)图中亮点在整个图像所占比例非常小,且图像存在明显噪声,所以otsu计算所得阈值并不准确,在这里我使用sobel模板计算了图像像素的梯度的大小,并将图像在梯度值最大的前0.03%取出来计算直方图,并用otsu算法计算阈值,分割结果如图(e)。
局部阈值分割
所谓局部阈值分割可以这样理解,图像分割中不再使用一个全局的阈值,而是对不同区域使用不同的阈值进行分割,这里单个区域可以小到一个像素大小。那么
局部阈值分割在什么情况下适用呢?如下图,由于噪声或光照等影响,使图像明暗不均,全局阈值分割无法满足,那么我们可以尝试使用局部阈值分割了。常用的方法有图像分块、动态平均等。
图像分块
针对上述情况,一个简单可行的办法就是将图像分成不重叠的矩形块,每一块图像使用一次全局阈值分割(可使用迭代法或otsu),显然,分块矩形应足够小,使得每个矩形的光照近似均匀。如下图所示,分割效果良好。
动态平均
这种方法类似于均值滤波,计算图像所有像素与其周围N*N区域的灰度平均值的差,这样可以生成一幅与源图像大小相同差值矩阵,根据每个像素对应的差值大小使用某一阈值进行分割。如下图所示,图像image每个像素与其邻域的平均meanimage,我们分割的依据就是这二者的差。
但是要注意的是,我们所计算的当前像素的区域尺寸应该比我们所要分割的物体尺寸大一些才好,所以这种方法分割图像中小物体非常有效。如下图所示,分割效果良好。当然,如果直接计算这样一个差值矩阵,将非常费时,但是不必担心,高效的加速算法是有的。
好了,就讲到这里了,我主要的参考资料来自冈萨雷斯的《数字图像处理》。