传统图像分割——分水岭算法(watershed)

传统图像分割——分水岭算法(watershed)

文章目录

前言

本篇文章主要梳理分水岭算法的原理,不涉及编程实现
一些经典的分水岭算法文献:

  • [1] Vincent L, Soille P. Watersheds in digital spaces: an efficient algorithm based on immersion simulations[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 1991, 13(06): 583-598.

  • [2] Roerdink J B T M, Meijster A. The watershed transform: Definitions, algorithms and parallelization strategies[J]. Fundamenta informaticae, 2000, 41(1, 2): 187-228.

  • [3] Najman L, Schmitt M. Watershed of a continuous function[J]. Signal Processing, 1994, 38(1): 99-112.

Matlab代码可参考使用教程:

  • https://ww2.mathworks.cn/help/images/marker-controlled-watershed-segmentation.html?s_tid=gn_loc_drop

一、什么是分水岭算法?

传统分水岭算法是一种基于拓扑理论的形态学分割方法。通常在基于形态学分割的方法中,会将图片视作地形表面,将图片的每一个灰度级与等高线相对应。由此,图片的每一个局部最小值都会有一个影响区域(influence zone)这些影响区域的边界被称为”分水岭”(相当于是寻找波峰线) 这样做的好处在于对于图片梯度的估计非常直接,便于寻找图像的梯度波峰,用于分割。
下图所示为分水岭的 一维示意图。更直观一点来讲,首先戳漏每一个局部最小值点,然后水从下到上漫延会逐渐淹没B V i BV_i B V i ​这些影响区域(图(a),也被称为吸水盆地,注意这些不同的吸水盆地内水的高度是一致的);而随着水位继续上涨中间的小峰值也会被淹没,为了不让两个不同的影响区域合并会建立一个水坝(图(b)中Barrage),这些水坝就是”地形图”的分水岭,也可以想象为图形的边缘。

传统图像分割——分水岭算法(watershed)
而对于图像分割任务这种 二维的情况,分水岭更难获取,二维的情况如下图所示(分水岭为图中Dam)
传统图像分割——分水岭算法(watershed)

; 二、经典的分水岭求解算法

1.定义

  • 测地线距离(geodesic distance):对于一个集合A A A,a a a,b b b为A A A中的两个元素,则定义在A A A中连接a a a与b b b的路径长度的最小值为测地线距离,记作d A ( a , b ) d_A(a,b)d A ​(a ,b )。具体来讲,如下图所示两个黑点之间的测地线距离为d 12 + d 23 + d 34 + d 45 d_{12}+d_{23}+d_{34}+d_{45}d 1 2 ​+d 2 3 ​+d 3 4 ​+d 4 5 ​。在三维曲面空间中两点间的测地距离就是两点间沿着三维曲面的表面走的最短路径。
    传统图像分割——分水岭算法(watershed)
  • 测地线影响区域(geodesic influence zone):对于A A A中的一个点B i B_i B i ​,所有与点B i B_i B i ​的测地线距离小于距离其他点B j B_j B j ​距离的点的集合,即i z A ( B i ) = { p ∈ A , ∀ j ∈ [ 1 : i − 1 , i + 1 : k ] , d A ( p , B i ) < d A ( p , B j ) } iz_A(B_i)={p \in A,\forall j \in [1:i-1,i+1:k],d_A(p,B_i)
  • 集水盆地(catchment basins):对于数值图像I I I,定义h m i n h_{min}h m i n ​是图像I I I最小的灰度级,T h ( I ) T_{h}(I)T h ​(I )是图像I I I中所有灰度级小于等于h h h的像素点,M i n h Min_{h}M i n h ​是图像I I I在灰度级h h h处区域最小值的集合,进而可以通过递归求解得到集合X h m a x X_{h_{max}}X h m a x ​​。X h m i n = T h m i n ( I ) X_{h_{min}}=T_{h_{min}}(I)X h m i n ​​=T h m i n ​​(I ) ∀ h ∈ [ h m i n , h m a x − 1 ] , X h + 1 = M i n h + 1 ∪ I Z T h + 1 ( I ) ( X h ) \forall h\in [h_{min},h_{max}-1],X_{h+1}=Min_{h+1}\cup IZ_{T_{h+1}(I)}(X_h)∀h ∈[h m i n ​,h m a x ​−1 ],X h +1 ​=M i n h +1 ​∪I Z T h +1 ​(I )​(X h ​)

; 2.算法流程

  • 首先,把梯度图像中所有的像素按照灰度值分类,并设定一个测地线距离阈值
  • 其次,找到灰度值最小的像素点(即h m i n h_{min}h m i n ​),让阈值从最小值开始增长(h m i n + 1 h_{min}+1 h m i n ​+1,…,h m a x h_{max}h m a x ​),在增长的过程中计算h m i n h_{min}h m i n ​与像素点的测地线距离,如果小于设定阈值,则将这些像素淹没,否则在这些像素上设置大坝,这样就对这些邻域像素进行了分类。

示意图如下[4]

传统图像分割——分水岭算法(watershed)

[4]摘自https://zhuanlan.zhihu.com/p/67741538
[5]一个讲的比较清晰的视频:https://www.bilibili.com/video/BV1fk4y167Gv?spm_id_from=333.337.search-card.all.click&vd_source=4242990e0fbe2c9c04876ca373dbce12

总结

可以看到传统分水岭算法计算量大,并且阈值的选取与灰度级的数量都会影响到分割效果,另外分水岭算法处理复杂图像的效果可能会差。

Original: https://blog.csdn.net/dreaming__star/article/details/124226249
Author: dreaming__star
Title: 传统图像分割——分水岭算法(watershed)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/631728/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球