使用C 、opencv进行分水岭分割图像
分水岭概念是以对图像进行三维可视化处理为基础的:其中两个是坐标,另一个是灰度级。基于“地形学”的这种解释,我们考虑三类点:
a.属于局部性最小值的点,也可能存在一个最小值面,该平面内的都是最小值点
b.当一滴水放在某点的位置上的时候,水一定会下落到一个单一的最小值点
c.当水处在某个点的位置上时,水会等概率地流向不止一个这样的最小值点
对一个特定的区域最小值,满足条件(b)的点的集合称为这个最小值的“汇水盆地”或“分水岭”。满足条件(c)的点的集合组成地形表面的峰线,称做“分割线”或“分水线”。
分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,目前较著名且使用较多的有2种算法:
(1) 自下而上的模拟泛洪的算法 (2) 自上而下的模拟降水的算法
这里介绍泛洪算法的过程。
算法主要思想:我们把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,模拟泛洪算法的基本思想是:假设在每个区域最小值的位置上打一个洞并且让水以均匀的上升速率从洞中涌出,从低到高淹没整个地形。当处在不同的汇聚盆地中的水将要聚合在一起时,修建的大坝将阻止聚合。水将达到在水线上只能见到各个水坝的顶部这样一个程度。这些大坝的边界对应于分水岭的分割线。所以,它们是由分水岭算法提取出来的(连续的)边界线。
原图像: 地形俯视图: