分水岭算法是图像分割算法中十分重要的一种算法,由于其具有良好的边缘检测能力并且能够得到相对集中的集水盆的特点已经被广泛的应用于图像处理过程中。分水岭算法最早由Soille P于1992年提出,并被用于图像分割领域。然而分水岭算法在获取良好边缘的同时也面临着影像过分割的问题,因此有学者对此进行研究提出了多种分水岭分割方式,本文简单介绍一下最基本的分水岭分割方式。
分水岭算法基本思想:
一个灰度影像可以看做一个高程影像,灰度的变化就是地形的起伏。假设向该区域不断注水,则地势较低的位置会首先被淹没,随着水位的升高淹没的区域也会不断提高,而初始位置称为集水盆。而分水岭算法就是基于此基本思想,首先假设图像灰度值为高度值,通过集水盆区域不断注水使得每个淹没区域不断扩大,而当水淹没到一定高度时两个集水盆会相连合并为同一个区域,此时就应该在这两个集水盆之间建立拦水坝以阻止区域的合并,持续次过程直到注水高度满足要求得到所有集水盆的淹没区域。
分水岭算法具体流程:
(1)计算影像梯度,通过影像梯度获取梯度值较小的区域作为集水盆,在获取集水盆的过程中通过八方向寻找,获取同一集水盆内所有像素并把不同集水盆像素进行编号,得到影像的集水盆区域。遍历所有集水盆区域,每个集水盆区域的边界。
(2)从集水盆区域开始注水,对集水盆区域边界像素进行八方向判断,检测像素是否能够被淹没,并重新计算影像集水盆和集水盆边界像素。水淹没到两个集水盆之间则停止淹没,两集水盆之间的像素为分水岭。
(3)重复步骤(2)直到水淹没到给定的高度获得所有集水盆的分水岭。
分水岭算法改进:
分水岭算法的改进算法很多,包括层次分水岭,标记分水岭,数学形态学分水岭算法等,了解更多可以查看wikipedia:http://en.wikipedia.org/wiki/Watershed_(image_processing)
参考资料:
[1] 冈萨雷斯. 数字图像处理(第三版)
[3] http://en.wikipedia.org/wiki/Watershed_(image_processing)
目前已经实现分水岭分割算法并将分割后的图像转换为SHP格式的文件,但是代码比较混乱,正在调整中,如有需要可以留下邮箱,代码依赖与GDAL影像处理库文件,数据转换为SHP格式代码不在影像分割算法中,最后获得的结果分割每类为一个值的影像。