参考网址:https://blog.csdn.net/xihuaxi/article/details/72639149
https://blog.csdn.net/dcrmg/article/details/52498440
分水岭图像分割算法借助地形学概念进行图像分割,近年来广泛使用。
1. 基本原理和步骤
1)原理
分水岭方法将图像看作3-D的地形表示,即2-D的地基(对应图像空间)加上三维的高度(对应图像灰度)。
实际中建立不同目标间的分水岭的过程常借助涨水法(水从低上涨)来讨论。如图1所示
假设有水从各谷底空涌出并且水位逐渐增高,如果两个相邻的谷底(区域A和B)涌出的水位高过其间的峰间这些谁就会汇合。这个汇合的点就是分水岭。
图1
由此可见,如果能确定分水岭的位置,就能将图像用一组各自封闭的曲线分割成不同的区域。
分水岭图像分割算法就是通过确定分水岭的位置来进行图像分割的。一般考虑到各区域内部像素的灰度比较接近,而相邻区域像素间的灰度差距较大,可以先计算一幅图像的梯度图,再寻找梯度图的分水岭。
在梯度图中,小梯度值对应区域内部,大梯度值对应区域的边间,分水岭算法寻找大梯度值像素的位置,即边界位置。
2)借助数学形态学中的膨胀运算迭代计算分水岭的方法
2.1)设给定一幅待分割图像f(x,y),梯度图像g(x,y),分水岭的计算是在梯度图像上进行的。
2.2)用M1,M2,...,Mn表示各局部极小值的像素位置,C(Mi)为对应的Mi对应区域中像素坐标的集合用n代表当前的梯度阈值,
T[n]代表记为(u,v)的像素集合,g(u,v)<n,即
T[n]={(u,v) | g(u,v)<n}
梯度阈值从图像梯度范围的最低值整数增加。当梯度阈值为n时,g(x,y)<n平面的像素集合为T[n].
对Mi所在的区域满足条件的坐标集合C(Mi)可看做一幅二值图像:Cn(Mi)=C(Mi)∩T[n],即同时在C(Mi)区域和T[n]区域的地方Cn(Mi)=1,否则为0。
用C[M]代表所有梯度阈值为n时图像中所有满足梯度值小于n的像素集合:C[n]=∪Cn(Mi) i<n,C[max+1]为所有区域的并集,max为图像灰度范围的最大值。
2.3)初始化C[min+1]=t[min+1],然后逐渐迭代进行。设在步骤n时,以建立C[n-1-1],下面考虑从C[n-1]得到C[n].
令S代表T[n]中连通组元的集合,每个连通组元s∈S[n]时,有三种情况:
2.3.1)s∩C[n-1]是空集--C[n]=s+C[n-1]
2.3.2)s∩C[n-1]包含C[n-1]中的一个连通组元--C[n]=s+C[n-1]
2.3.3)s∩C[n-1]包含C[n-1]中一个以上的组元--需要在s中建立分水岭,对s∩C[n-1]进行膨胀
2. 实现
此实现用的是改进后的水平集方法,利用标号控制分割。
1)OpenCV源代码的解读
http://blog.csdn.net/byxdaz/article/details/4377753
2)具体应用过程
2.1)http://blog.csdn.net/dcrmg/article/details/52498440--如何具体实现
2.2)http://blog.csdn.net/skeeee/article/details/9013575--建立分水岭类进行应用
2.3)http://blog.csdn.net/fdl19881/article/details/6749976--交互
参考文献:
1)http://www.jdzj.com/plc/article/2010-6-24/17974-1.htm(图1来源)
2)章毓晋. 图像工程:图像分析[M]. 清华大学出版社, 2012.(文字部分来源)