赞
踩
创建时间:2020年6月22日
修改时间:2021年6月12日
图像分割的首要任务是确定图像的轮廓。图像内物体的轮廓,其实际上是一条二维平面内的闭合曲线,而基于对这一数学事实的思考,研究者们开始探究从更高维度的思考角度审视图像分割的算法实现,水平集方法(Level Set Method,LSM)应运而生。
LSM不直接对图像轮廓进行检测操作,而是将图像轮廓嵌入到更高维度的函数,此时,当前的图像的二维轮廓即为这个高纬度曲面函数的零水平集。这个高维函数称为水平集函数(Level Set Function, LSF),图像轮廓被认为是LSF的零水平集,即当前轮廓(闭合曲线L)满足
L
=
{
(
x
,
y
)
∣
ϕ
(
x
,
y
)
=
0
}
(1)
L=\{~(x,y)~|~\phi(x,y)=0~\} \tag{1}
L={ (x,y) ∣ ϕ(x,y)=0 }(1)其中,
(
x
,
y
)
(x,y)
(x,y) 为该图像轮廓的坐标点集。可以说,闭合曲线L,即当前图像轮廓由LSF的零水平集隐含的表达。LSM将图像轮廓,即二维闭合曲线描述为三维空间内LSF的演化。
李纯明等人基于对LSM的思考,提出了一种基于距离正则化的不需要对水平集函数进行重新初始化的LSF模型,称为DRLSE模型。又由于对目标图像实现分割需要人为参与,帮助计算机进行选择,因此在本次实验报告中,我还设计了人机交互板块,对用户输入的特定信息进行分析并予以反馈。以下对DRLSE模型的主要迭代公式,以及LSF函数初始化的方法和图像轮廓的求解方式进行简单介绍。
DRLSE模型是由能量公式
E
(
ϕ
)
=
μ
R
p
(
ϕ
)
+
E
e
x
t
(
ϕ
)
\mathcal{E}(\phi)=\mu R_{p}(\phi)+\mathcal{E}_{ext}(\phi)
E(ϕ)=μRp(ϕ)+Eext(ϕ) 演化而来,其中
E
e
x
t
(
ϕ
)
\mathcal{E}_{ext}(\phi)
Eext(ϕ) 根据LSM的应用领域的不同而有不同的定义。在图像分割领域,DRLSE模型将其定义为
E
(
ϕ
)
=
μ
R
p
(
ϕ
)
+
λ
L
g
(
ϕ
)
+
α
A
g
(
ϕ
)
(2)
\mathcal{E}(\phi)=\mu R_{p}(\phi)+\lambda \mathcal{L}_{g}(\phi)+\alpha \mathcal{A}_{g}(\phi)\tag{2}
E(ϕ)=μRp(ϕ)+λLg(ϕ)+αAg(ϕ)(2)其中
μ
>
0
\mu>0
μ>0,
λ
>
0
\lambda>0
λ>0 并且
α
\alpha
α为常数。在公式(2)中,其第二项
L
g
\mathcal{L}_{g}
Lg 表示函数
g
g
g (公式(11)) 沿着零水平集轮廓的线积分,当LSF的零水平集位于物体的边界时,该线积分最小。公式第三项
A
g
\mathcal{A}_{g}
Ag 描述为当前零水平集,即二维闭合曲线内区域的加权面积。如果初始轮廓放置在物体外部,则
α
>
0
\alpha>0
α>0 ,以便在水平集演化过程中零水平轮廓会缩小;如果初始轮廓放置在物体内部,则
α
<
0
\alpha<0
α<0 以展开轮廓。当零水平集靠近物体边界时,第三项控制曲线扩展或收缩的速率将减小,使得零水平集逐渐稳定下来(文献使用的参数为
μ
=
0.2
,
λ
=
5
,
α
=
−
3
\mu=0.2,\lambda=5,\alpha=-3
μ=0.2,λ=5,α=−3)。公式(3) 即对 公式(2) 的离散化。
∂
ϕ
∂
t
=
μ
div
(
d
p
(
∣
∇
ϕ
∣
)
∇
ϕ
)
+
λ
δ
ε
(
ϕ
)
div
(
g
∇
ϕ
∣
∇
ϕ
∣
)
+
α
g
δ
ε
(
ϕ
)
(3)
{\frac{\partial \phi}{\partial t}=\mu \operatorname{div}\left(d_{p}(|\nabla \phi|) \nabla \phi\right)}{+\lambda \delta_{\varepsilon}(\phi) \operatorname{div}\left(g \frac{\nabla \phi}{|\nabla \phi|}\right)+\alpha g \delta_{\varepsilon}(\phi)} \tag{3}
∂t∂ϕ=μdiv(dp(∣∇ϕ∣)∇ϕ)+λδε(ϕ)div(g∣∇ϕ∣∇ϕ)+αgδε(ϕ)(3)其中
δ
(
ϕ
)
\delta(\phi)
δ(ϕ) 为狄拉克函数,
x
x
x 为空间变量。由于增加了距离正则化项,公式(3)中的所有空间导数都可以用中心差分格式来离散化。中心差分格式比传统水平集公式中常用的一阶迎风格式更精确、更有效。
DRLSE模型等号右侧公式可以代替为
L
(
ϕ
i
,
j
k
)
=
μ
div
(
d
p
(
∣
∇
ϕ
∣
)
∇
ϕ
)
+
λ
δ
ε
(
ϕ
)
div
(
g
∇
ϕ
∣
∇
ϕ
∣
)
+
α
g
δ
ε
(
ϕ
)
(4)
L\left(\phi_{i, j}^{k}\right)=\mu \operatorname{div}\left(d_{p}(|\nabla \phi|) \nabla \phi\right)+\lambda \delta_{\varepsilon}(\phi) \operatorname{div}\left(g \frac{\nabla \phi}{|\nabla \phi|}\right)+\alpha g \delta_{\varepsilon}(\phi) \tag{4}
L(ϕi,jk)=μdiv(dp(∣∇ϕ∣)∇ϕ)+λδε(ϕ)div(g∣∇ϕ∣∇ϕ)+αgδε(ϕ)(4)在检查文献代码中,发现 公式(4) 中对散度的求解,即
d
i
v
(
⋅
)
div(·)
div(⋅) 算子的计算方式与 公式(4) 描述有一些不同。借鉴文献代码,
(1)对第一项的求解实际上是按照
div ( d p ( ∣ ∇ ϕ ∣ ) ∇ ϕ ) = divergence ( d p ( ∇ ϕ ) ⋅ ϕ x − ϕ x , d p ( ∇ ϕ ) ⋅ ϕ v − ϕ v ) + 4 ∗ del 2 ( ϕ ) (5) \operatorname{div}\left(d_{p}(|\nabla \phi|) \nabla \phi\right)=\operatorname{divergence}\left(d p(\nabla \phi) \cdot \phi_{x}-\phi_{x}, d p(\nabla \phi) \cdot \phi_{v}-\phi_{v}\right)+4 * \operatorname{del} 2(\phi) \tag{5} div(dp(∣∇ϕ∣)∇ϕ)=divergence(dp(∇ϕ)⋅ϕx−ϕx,dp(∇ϕ)⋅ϕv−ϕv)+4∗del2(ϕ)(5)的方式来实现的。其中 d i v e r g e n c e divergence divergence 和 d e l 2 del2 del2 都是Matlab内置的函数。
(2)对第二项的求解实际上是按照
div ( g ∇ ϕ ∣ ∇ ϕ ∣ ) = g x ⋅ ϕ x ∇ ϕ + g y ⋅ ϕ y ∇ ϕ + g ⋅ d i v e r g e n c e ( g x , g y ) (6) \operatorname{div}\left(g \frac{\nabla \phi}{|\nabla \phi|}\right)=g_{x} \cdot \frac{\phi_{x}}{\nabla \phi}+g_{y} \cdot \frac{\phi_{y}}{\nabla \phi}+g \cdot d i v e r g e n c e\left(g_{x}, g_{y}\right) \tag{6} div(g∣∇ϕ∣∇ϕ)=gx⋅∇ϕϕx+gy⋅∇ϕϕy+g⋅divergence(gx,gy)(6)代码披露如下
% Gradfx,Gradfy 为LSF的偏导数矩阵
fa = divergence(dps.*Gradfx-Gradfx,dps.*Gradfy-Gradfy)+4*del2(faiLSF); % 公式(5)
% 需要防止分母出现为0的情况,否则将使得分式没意义出现NaN
gx = Gradfx./G;
gy = Gradfy./G;
% g_Gfx,g_Gfy 为函数g的偏导数矩阵
divMatrix = (g_Gfx.*gx+g_Gfy.*gy) + g.*divergence(gx,gy); % 公式(6)
函数左侧的偏微分方程可以通过有限差分格式来实现,即
∂
ϕ
∂
t
=
(
ϕ
i
,
j
k
+
1
−
ϕ
i
,
j
k
)
/
Δ
t
(7)
\frac{\partial \phi}{\partial t}=\left(\phi_{i, j}^{k+1}-\phi_{i, j}^{k}\right) / \Delta t \tag{7}
∂t∂ϕ=(ϕi,jk+1−ϕi,jk)/Δt(7)如此一来,我们解决了离散公式的偏微分方程的求解。于是对于DRLSE模型则有迭代公式
ϕ
i
,
j
k
+
1
=
ϕ
i
,
j
k
+
Δ
t
L
(
ϕ
i
,
j
k
)
,
k
=
0
,
1
,
2
,
…
(8)
\phi_{i, j}^{k+1}=\phi_{i, j}^{k}+\Delta t L\left(\phi_{i, j}^{k}\right), \quad k=0,1,2, \dots \tag{8}
ϕi,jk+1=ϕi,jk+ΔtL(ϕi,jk),k=0,1,2,…(8)其中,
k
k
k 表示当前迭代的次数,
Δ
t
\Delta t
Δt 表示时间步长。我们用在笛卡尔坐标网格上定义的LSF,即
ϕ
i
,
j
\phi_{i,j}
ϕi,j 来表示水平集。对于 公式(8) 的理解,可以认为是:
之
后
的
位
置
=
当
前
位
置
+
时
间
间
隔
×
速
度
之后的位置=当前位置+时间间隔\times速度
之后的位置=当前位置+时间间隔×速度
通常使用二维阶跃函数作为初始LSF,因为它可以极其有效地生成。二维阶跃函数定义为
ϕ
0
(
x
)
=
{
−
c
0
,
if
x
∈
R
0
c
0
,
otherwise
(9)
\phi_{0}(\mathbf{x})=\left\{
此外,该区域
R
0
R_{0}
R0有时可以通过简单有效的初步分割步骤,如阈值分割,使其接近要分割的区域。因此,只需少量的迭代就可以将零水平集从的
R
0
R_{0}
R0边界移动到所需的图像内的对象的边界。
窄带的构建过程,实际上是确定LSF零水平集位置的过程。在一维曲线当中,曲线某个区间存在零点的充要条件是
1)曲线连续;
2)区间两个端点的函数值的符号相反。
确定LSF的零交叉点也可以用相似的方法来确定。我们仍然使用掩模来完成。在当前处理像素点的领域
N
i
,
j
(
r
)
N_{i, j}^{(r)}
Ni,j(r)内,如果
ϕ
i
−
1
,
j
\phi_{i-1,j}
ϕi−1,j和
ϕ
i
+
1
,
j
\phi_{i+1,j}
ϕi+1,j是相反的符号,或者
ϕ
i
,
j
−
1
\phi_{i,j-1}
ϕi,j−1和
ϕ
i
,
j
+
1
\phi_{i,j+1}
ϕi,j+1是相反的符号,那么当前计算的网格点
(
i
,
j
)
(i,j)
(i,j)称之为一个零交叉点。LSF的所有零交叉点的集合用
Z
Z
Z来表示。然后,我们构造窄带为
B
r
=
⋃
(
i
,
j
)
∈
Z
N
i
,
j
(
r
)
(10)
B_{r}=\bigcup_{(i, j) \in Z} N_{i, j}^{(r)} \tag{10}
Br=(i,j)∈Z⋃Ni,j(r)(10)其中
N
i
,
j
(
r
)
N_{i, j}^{(r)}
Ni,j(r)是当前网格点的一个
(
2
r
+
1
)
×
(
2
r
+
1
)
(2 r+1) \times(2 r+1)
(2r+1)×(2r+1)尺寸的邻域,这个就是掩模的尺寸大小。该过程可以称之为遍历过程。DRLSE的窄带实现包括以下步骤:
文献代码中,对LSF零水平集位置的确定通过contour函数来实现,代码如下
% 在原始图像上绘制出此时的初始LSF的零水平集
level = [0,0];
contour(initial_faiLSF,level,'r','LineWidth',2);% contour思路借鉴
DRLSE模型迭代的终止准则为,当连续迭代的零交叉点停止变化,或者超过规定的最大迭代次数,则模型停止迭代。
公式(3)中函数
g
g
g 的表达式
g
≜
1
1
+
∇
∣
G
σ
∗
I
∣
2
(11)
g \triangleq \frac{1}{1+\nabla\left| G_{\sigma} * I\right|^{2}} \tag{11}
g≜1+∇∣Gσ∗I∣21(11)其中
G
σ
G_{\sigma}
Gσ 是一个高斯核函数,
σ
\sigma
σ 为一个标准差。公式(11) 用来平滑图像当中的噪声,并求取平滑后的图像梯度场模的平方,再按照 公式(11) 的描述求解函数
g
g
g。但当前计算点位于图像边界时,此时梯度值较大,
g
g
g 值小,于是函数
g
g
g 通常在对象边界处取较小的值。此外
d
p
dp
dp 函数被定义为
d
p
(
s
)
≜
p
′
(
s
)
s
(12)
d_{p}(s) \triangleq \frac{p^{\prime}(s)}{s} \tag{12}
dp(s)≜sp′(s)(12)其中函数
p
p
p 为势能函数,依据文献采用double-well即双井式势能函数
p
=
p
2
p=p_2
p=p2 来设计,
p
2
p_2
p2 表达式为
p
2
(
s
)
=
{
1
(
2
π
)
2
(
1
−
cos
(
2
π
s
)
)
,
if
s
≤
1
1
2
(
s
−
1
)
2
,
if
s
≥
1
(13)
p_{2}(s)=\left\{
p
2
′
(
s
)
=
{
1
2
π
sin
(
2
π
s
)
,
if
s
≤
1
s
−
1
,
if
s
≥
1
(14)
p_{2}^{\prime}(s)=\left\{
δ
ε
(
x
)
=
{
1
2
ε
[
1
+
cos
(
π
x
ε
)
]
,
∣
x
∣
≤
ε
0
,
∣
x
∣
>
ε
(15)
\delta_{\varepsilon}(x)=\left\{
H
ε
(
x
)
=
{
1
2
(
1
+
x
ε
+
1
π
sin
(
π
x
ε
)
)
,
∣
x
∣
≤
ε
1
,
x
>
ε
0
,
x
<
−
ε
(16)
H_{\varepsilon}(x)=\left\{
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。