介绍
分水岭(watershed,也称分水线/水线),建立不同目标间的分水岭(涨水法)
把图像看成3-D地形的表示,即2-D的地基(对应图像空间)加上第3维的高度(对应图像灰度),计算过程是串行的,得到的是目标的边界。
步骤
1.待分割图像与梯度图像
待分割图像 f ( x , y ) f (x, y) f(x,y),其梯度图像为 g ( x , y ) g(x, y) g(x,y)
2.局部极小值集合
用 M 1 , M 2 , … , M R M_1, M_2, …, M_R M1,M2,…,MR表示 g ( x , y ) g(x, y) g(x,y)中各局部极小值的像素位置, C ( M i ) C(M_i) C(Mi)为与Mi对应的区域中的像素坐标集合。
3.求 T [ n ] T[n] T[n]
用
n
n
n表示当前梯度阈值,
T
[
n
]
T[n]
T[n]代表记为
(
u
,
v
)
(u, v)
(u,v)的像素集合,
g
(
u
,
v
)
<
n
g(u, v) < n
g(u,v)<n,
4.求 C n ( M i ) C_n(M_i) Cn(Mi)
对
M
i
M_i
Mi所在的区域,其中满足条件的坐标集合
C
n
(
M
i
)
C_n(M_i)
Cn(Mi)可看作一幅二值图像
5.求 C [ n ] C[n] C[n]
用
C
[
n
]
C[n]
C[n]代表在梯度阈值为
n
n
n时图像中所有满足梯度值小于
n
n
n的像素
C
[
m
a
x
+
1
]
C[max+1]
C[max+1]将是所有区域的并集(
m
a
x
max
max是图像灰度范围的最大值)
C
[
n
–
1
]
C[n–1]
C[n–1]是
C
[
n
]
C[n]
C[n]的子集,
C
[
n
]
C[n]
C[n]是
T
[
n
]
T[n]
T[n]的子集,所以
C
[
n
–
1
]
C[n – 1]
C[n–1]又是
T
[
n
]
T[n]
T[n]的子集,因此每个
C
[
n
–
1
]
C[n–1]
C[n–1]中的连通组元都包含在一个
T
[
n
]
T[n]
T[n]的连通组元中。
6.分水岭判定
算法初始化
C
[
m
i
n
+
1
]
=
T
[
m
i
n
+
1
]
C[min+1]=T[min+1]
C[min+1]=T[min+1],然后算法逐步迭代。设步骤
n
n
n时已经建立了
C
[
n
−
1
]
C[n-1]
C[n−1],由
C
[
n
−
1
]
C[n-1]
C[n−1]得到
C
[
n
]
C[n]
C[n]的过程如下:
令
s
s
s 代表
T
[
n
]
T[n]
T[n]中的连通组元集合,对每个连通组元s ,有3种可能性:
(1)
s
∩
C
[
n
–
1
]
s ∩ C[n – 1]
s∩C[n–1]是1个空集
(2)
s
∩
C
[
n
–
1
]
s ∩ C[n – 1]
s∩C[n–1]里包含
C
[
n
–
1
]
C[n – 1]
C[n–1]中的一个连通组元
(3)
s
∩
C
[
n
–
1
]
s ∩ C[n – 1]
s∩C[n–1]里包含
C
[
n
–
1
]
C[n – 1]
C[n–1]中一个以上的连通组元
分别处理如下:
(1)
C
[
n
]
C[n]
C[n]可由把连通组元
s
s
s 加到
C
[
n
–
1
]
C[n – 1]
C[n–1]中得到
(2)
C
[
n
]
C[n]
C[n]可由把连通组元
s
s
s 加到
C
[
n
–
1
]
C[n – 1]
C[n–1]中得到
(3) 需要在
s
s
s 中建分水岭