分水岭算法 c语言实现,分水岭算法的应用

上海交通大学

医学图像处理

数学形态学一个应用是分水岭算法,为了便于理解,可以将图像的灰度空间与地球表面的地形高度相类比,据此,发明了应用于图像领域的分水岭算法。

测地线距离

假设,如下图所示的一个岛屿,要从

math?formula=x点走到

math?formula=y点,虚线所表示的是最短的直线距离,也就是欧式距离,考虑到现实情况,不能穿过水面到达目标地点,所以,能够从起点到终点的实际通行路线中最短的距离成为测地线距离。

4a87800abbd4

通过以上分析,给出测地线距离的定义:

给定指定连通域

math?formula=F_a,测地线距离就是

math?formula=F_a中两个像素点

math?formula=x

math?formula=y之间的最短(可执行)路径的长度,用公式定义如下:

math?formula=d_%7BF_%7Ba%7D%7D(x%2Cy)%20%3D%20%5Cwedge%20%5C%7B%20l(P)%5C%7D

测地线影响域(Geodesic Influence Zone,IZ)

如下图所示,假定一个连通域

math?formula=A包含了若干个子区域

math?formula=B_1%2CB_2%2C%E2%80%A6B_k%EF%BC%8C,用公式表示

math?formula=iZ_A(B_i)所表示的测地线影响域为:

math?formula=iZ_A(B_i)%20%3D%20%5C%7B%20p%20%5Cin%20A%20%2C%5Cforall%20j%20%5Cin%20%5B1%2Ck%5D%2F%20%5C%7Bi%5C%7D%2C%20d_A(p%2CB_i)%3Cd_A(p%2CB_j)%5C%7D

以上公式可以理解为,区域

math?formula=A中的像素点到

math?formula=B_i域的测地线距离比其他域更小的点的轨迹的集合,也就是以

math?formula=B_i域中的种子点出发,其测地线距离比其他域的种子点都要小的点集所构成的区域。如下图所示:

4a87800abbd4

测地线影响域的skeleton(SKIZ)

SKIZ表示区域

math?formula=A中的点不属于任何一个测地线影响域,也就是域

math?formula=A中的点到两个测地线影响域的中测地线距离相等。区域

math?formula=A中构成

math?formula=B的SKIZ,记作

math?formula=SKIZ_A(B),用公式的表述如下:

math?formula=SKIZ_A(B)%20%3D%20A%20%2FIZ_A(B)%20%5C%20%5C%20with%20%5C%20%5C%20IZ_A(B)%20%3D%20%5Cbigcup_%7Bi%20%5Cin%20%5B1%2Ck%5D%7DiZ_A(B_i)

注意:,

math?formula=A%2FB 表示区域

math?formula=B以外的

math?formula=A中的所有点的集合集合

分水岭算法

如下图所示的山脉地形图,包含山谷和山峰,在水平面不断上升的过程中,会逐渐淹没掉一些较低的区域,而为了防止水溢出,需要不断在山脊上修建大坝,这个过程不断进行,最后会得到一个区域分割的效果。

4a87800abbd4

在一副图像上实现分水岭算法,与上述过程相似,只不过是通过灰度值充当水平面的角色,对图像进行不断的填埋,最后得到区域分割的效果图。

4a87800abbd4

如上图所示的动画中,不断用灰度值代表的水平面淹没图像中的最小值,最后得到分割后的图像。综上,分水岭算法的步骤可以总结如下:

按照图像灰度值对图像中的所有像素进行排序;

将最小的灰度值作为起始点,该灰度值也是初始阈值;

通过每次迭代加1的方式增加阈值,如果找到另外一个局部最小点,将其添加到最小点列表,然后计算和其他已存在的最小点的SKIZ,否则,计算该点和已经存在的最小点列表计算SKIZ

步骤3的过程可以理解为:以起始点为中心进行区域增长,区域增长的过程会不断接触新的邻域,而通过计算SKIZ距离的方式分配(区域增长所接触到的)邻域内的像素点,分配邻域内像素点的类别。

重复步骤3,直到所有的像素点都被分类到“盆地”(区域),或者阈值超过了最大的灰度。

如下图所示,另外一种分水岭算法的原理是,指定初始的种子点,只对种子点所在的邻域像素进行分类,而不考虑其他区域。

4a87800abbd4

分水岭算法的应用实例

如下图所示的图片,以最小点开始,进行分水岭算法,会将整幅图分割成许多小区域,造成过分割的效果。为了解决这一问题,有以下三种解决方案:

通过一些平滑运算(如高斯平滑)抹掉原图中的一些较小的像素点;

增加分水岭算法的初始阈值,通过分水岭算法直接抹掉一些较小的像素点;

通过其他算法,把已经混合在一起的一些小区域进行组合,之后在通过分水岭算法分割。

4a87800abbd4

最后,通过合并一些小区域再利用分水岭算法进行分割的效果如下图所示:

4a87800abbd4

如下图所示,展示了通过分水岭算法分割血细胞的流程:

4a87800abbd4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值