水平集方法的一个基本框架
水平集方法框架
水平集方法是现代图像处理中很重要的一个方法,为了说清楚这个东西,我们先介绍几个基本的概念。
零水平集
对于一个函数 ϕ(x⃗):Rn→R\phi(\vec x):{\mathbf{R}^n}\rightarrow \mathbf{R}ϕ(x):Rn→R(其中x⃗∈Rn\vec x \in {\mathbf{R}^n}x∈Rn ,下同),取其值域为零部分对应的定义域:
Γ={x⃗∣ϕ(x⃗)=0}\Gamma = \{ \vec x|\phi (\vec x) = 0\}Γ={x∣ϕ(x)=0}
这里, Γ∈Rn−1\Gamma \in {\mathbf{R}^{n-1}}Γ∈Rn−1 称为函数 ϕ\phiϕ 的零水平集,反之, ϕ\phiϕ 称为 Γ\GammaΓ 的一个水平集函数。
通俗地说,函数的水平集是这个函数在某个高度上所有点的一个集合。函数的零水平集有一些良好的性质,在如下图所示的曲面演化问题中,
n⃗\vec nn 为外法线向量, Γ\GammaΓ 为演化曲线。我们不妨假设有函数 ϕ(x⃗)\phi(\vec x)ϕ(x),它的零水平集为 Γ\GammaΓ ,并且满足,
{ϕ>0x⃗∈Γinϕ<0x⃗∈Γout\left\{ \begin{aligned} &\phi > 0&&\vec x \in {\Gamma_{in}}\\ &\phi < 0&&\vec x \in {\Gamma_{out}}\\ \end{aligned} \right.{ϕ>0ϕ<0x∈Γinx∈Γout
这里, Γin\Gamma_{in}Γin 表示 Γ\GammaΓ 内部, Γout\Gamma_{out}Γout 表示 Γ\GammaΓ 外部。那么,对于任意的 x⃗∈Γ\vec x \in \Gammax∈Γ , ϕ\phiϕ 有如下两个性质:
∇ϕ∣∇ϕ∣=−n⃗\frac{{\nabla \phi }}{{|\nabla \phi |}} = - \vec n∣∇ϕ∣∇ϕ=−n
证明:
如图所示,设 s⃗\vec ss 为零水平集 Γ\GammaΓ 的切线方向, ϕ\phiϕ 在 Γ\GammaΓ 沿切线方向上恒为零,故有:
∂ϕ∂s=0\frac{{\partial \phi }}{{\partial s}} = 0∂s∂ϕ=0 由链式法则,可得:
ϕs(x⃗)=∇ϕ⋅x⃗s=0{\phi _s}(\vec x) = \nabla \phi \cdot {{\vec x}_s} = 0ϕs(x)=∇ϕ⋅xs=0
由此可知 ∇ϕ\nabla \phi∇ϕ 与切向垂直,对 ∇ϕ\nabla \phi∇ϕ 进行单位化并根据 ϕ\phiϕ 内正外负的情况取符号,即得:
∇ϕ∣∇ϕ∣=−n⃗\frac{{\nabla \phi }}{{|\nabla \phi |}} = - \vec n∣∇ϕ∣∇ϕ=−ndiv(∇ϕ∣∇ϕ∣)=−κ{\rm{div}}(\frac{{\nabla \phi }}{{|\nabla \phi |}}) = -\kappadiv(∣∇ϕ∣∇ϕ)=−κ
证明:
ϕs\phi_sϕs 在 Γ\GammaΓ 沿切线方向上恒为零,故有: ϕss=0\phi_{ss}=0ϕss=0 ,由链式法则,可知:
ϕss(x⃗)=∂∂s(∇ϕ⋅x⃗s)=∂∂s∇ϕ⋅x⃗s+∇ϕ⋅x⃗ss{\phi _{ss}}(\vec x) = \frac{\partial }{{\partial s}}(\nabla \phi \cdot {{\vec x}_s}) = \frac{\partial }{{\partial s}}\nabla \phi \cdot {{\vec x}_s} + \nabla \phi \cdot {{\vec x}_{ss}}ϕss(x)=∂s∂(∇ϕ⋅xs)=∂s∂∇ϕ⋅xs+∇ϕ⋅xss
由曲率的定义,有 x⃗ss=−κn⃗\vec x_{ss}=-\kappa \vec nxss=−κn ,由性质 [xz1] ,有 ∇ϕ⋅n⃗=−∣∇ϕ∣\nabla \phi \cdot \vec n = -|\nabla \phi|∇ϕ⋅n=−∣∇ϕ∣ ,代入上式,移项,可得:
−κ∣∇ϕ∣=∂∂s∇ϕ⋅x⃗s- \kappa |\nabla \phi | = \frac{\partial }{{\partial s}}\nabla \phi \cdot {{\vec x}_s}−κ∣∇ϕ∣=∂s∂∇ϕ⋅xs
将上式左端展开,即证。
水平集方程
如下图所示,
我们将演化曲线上各点的速度分解到法线方向和切线方向,切线方向的速度不影响曲线几何形状的改变,所以,考虑由曲率驱动的曲线演化问题时,我们可以只考虑曲线上的点沿法向的速度。我们现在寻找一个发展方程 ϕ(x⃗(t),t)\phi(\vec x(t),t)ϕ(x(t),t) ,使得在每一个时刻 ttt ,它的零水平集 Γ(t)\Gamma(t)Γ(t) 恰好是曲线在不同的时刻的状态。
如上图所示,曲线上任意一点从当前时刻到下一个时刻,始终保持 ϕ(x⃗(t),t)=0\phi(\vec x(t),t)=0ϕ(x(t),t)=0 ,故对一个特定的时刻 ttt ,对任意 x⃗∈Γ(t)\vec x \in \Gamma(t)x∈Γ(t) ,有以下式子成立:
∂ϕ(x⃗,t)∂t=0\frac{{\partial \phi (\vec x,t)}}{{\partial t}} = 0∂t∂ϕ(x,t)=0
使用链式法则,可以得到:
∂ϕ(x⃗,t)∂t+∂ϕ(x⃗,t)∂x⃗⋅∂x⃗∂t=0\frac{{\partial \phi (\vec x,t)}}{{\partial t}} + \frac{{\partial \phi (\vec x,t)}}{{\partial \vec x}} \cdot \frac{{\partial \vec x}}{{\partial t}} = 0∂t∂ϕ(x,t)+∂x∂ϕ(x,t)⋅∂t∂x=0
如图所示,我们将 ttt 时刻, Γ\GammaΓ 曲线上的点的速度 v⃗\vec vv 分解为沿外法线方向的速度 v⃗n\vec v_nvn 和切线方向速度 v⃗s\vec v_svs ,用 vnv_nvn 表示 v⃗n\vec v_nvn 的大小,负值表示方向为内法线方向。容易知道, x⃗t=v⃗\vec x_t = \vec vxt=v ,再由之前的式子 ,那么上式可变为:
ϕt(x⃗,t)−vn∣∇ϕ(x⃗,t)∣=0{\phi _t}(\vec x,t) - {v_n}|\nabla \phi (\vec x,t)| = 0ϕt(x,t)−vn∣∇ϕ(x,t)∣=0
此方程是一个特殊的哈密顿-雅克比方程 (Hamilton-Jacobi Equation) ,一般就称之为水平集方程,需要注意的是,此时方程中的 x⃗∈Γ(t)\vec x \in \Gamma(t)x∈Γ(t) 。结合给定的初始曲线,那么曲线演化问题就转化为了解下面一个偏微分方程:
{ϕt(x⃗,t)−vn∣∇ϕ(x⃗,t)∣=0x⃗∈Γ(t),t>0Γ(0)={x⃗∣ϕ(x⃗,0)=0}\left\{ \begin{aligned} &{\phi _t}(\vec x,t) - {v_n}|\nabla \phi (\vec x,t)| = 0&\vec x \in \Gamma(t),t>0\\ &\Gamma(0)=\{\vec x|\phi(\vec x,0)=0\}\\ \end{aligned} \right.{ϕt(x,t)−vn∣∇ϕ(x,t)∣=0Γ(0)={x∣ϕ(x,0)=0}x∈Γ(t),t>0
符号距离函数
符号距离函数 (Signed Distance Function) 是一个水平集函数,它给定了点到某条曲线上距离这个点最近点的距离,也可以说是这个点离曲线的最短距离,它在数学上可以这样表述:
在某区域上给定一条曲线 Γ\GammaΓ ,定义与之相关的函数:
d(Γ,x⃗)={miny⃗∈Γ∣x⃗−y⃗∣x⃗∈Γin−miny⃗∈Γ∣x⃗−y⃗∣x⃗∉Γind(\Gamma,\vec x)= \left\{ \begin{aligned} \mathop {\min }\limits_{\vec y \in \Gamma } |\vec x - \vec y| & & &\vec x \in \Gamma_{in}\\ -\mathop {\min }\limits_{\vec y \in \Gamma } |\vec x - \vec y|& & &\vec x \notin \Gamma_{in}\\ \end{aligned} \right.d(Γ,x)=⎩⎪⎨⎪⎧y∈Γmin∣x−y∣−y∈Γmin∣x−y∣x∈Γinx∈/Γin
Γin\Gamma_{in}Γin 指 Γ\GammaΓ 内部,二维情况下, x⃗∈R2,y⃗∈R2\vec x \in \mathbf{R}^2 \text{,} \vec y\in \mathbf{R}^2x∈R2,y∈R2 ,那么称 ddd 为一个符号距离函数,下面把符号距离函数也简称为 SDF 。
符号距离函数有很多良好的性质,包括在边界上的几乎处处可微,关于凸区域的凸性,以及不同符号距离函数之间和差运算的一些性质,作为重点,列以下两条关于单位法向量和平均曲率的性质:
对于任意的 x⃗∈Γ\vec x \in \Gammax∈Γ ∣∇d∣=1|\nabla d| = 1∣∇d∣=1 这也是符号距离函数的一个判断条件,它是充要的。这里的充分性怎么理解?指的是对任意水平集曲线上的点都要满足。
对于任意的 x⃗∈Γ\vec x \in \Gammax∈Γ ,由水平集函数的性质可得:
∇d=−n⃗⋅∣∇d∣=−n⃗Δd=−κ∣∇d∣=−κ\begin{aligned} &\nabla d = - \vec n \cdot |\nabla d|=-\vec n &\\ &\Delta d = - \kappa |\nabla d| = - \kappa & \end{aligned}∇d=−n⋅∣∇d∣=−nΔd=−κ∣∇d∣=−κ
以上便是水平集方法的一些相关的基础知识。
水平集方法的一个基本框架相关推荐
- level set 介绍4(水平集方法)
2.5 水平集方法 在2.4中的时候,我们已经知道曲线演化主要涉及到两个几何参数,一个是曲线的曲率,一个是曲线的方向矢量,而这两个参数的计算一并不是一件容易的事情,怎么有效的更方便处理曲线的几何参数的 ...
- 卷积神经网络结合水平集方法
水平集方法用于深度卷积网络 水平集简介 CNN结合Level Set 疑惑 水平集简介 水平集(Level Set)方法是用于图像分割非常受欢迎的方法,其通过比目标维度高一维的水平集函数(LSF)的零 ...
- 水平集方法引入主动轮廓模型算法中的两种方法
水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...
- 拓扑优化中SIMP方法与水平集方法有何优缺点,水平集法变换到高维,不是更复杂了...
作者:周平章 链接:https://www.zhihu.com/question/52008623/answer/187927508 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- 计算机视觉之图像分割——水平集方法_ACWE2001
一个简单的例子引入能量函数 其实是Mumford-Shah的特例 用水平集函数表示曲线 变分法得到欧拉-拉格朗日公式 迭代法解偏微分方程 算法 问题 这篇博客介绍的是2001年的一篇文章Active ...
- 【图像分割】基于GAC水平集方法实现图像分割matlab 源码
一.简介 1 原理分析\ \ \ \ \ 2 编程过程\ 2.1 准备工作\ \ 2.2 迭代运算\ 二.源代码 ``` %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...
- 基于水平集方法和G0模型的SAR图像分割
基于水平集方法和G0模型的SAR图像分割 Abstract(摘要) 这篇文章提出了一种分割SAR图像的方法,探索利用SAR数据中的统计特性将图像分区域.我们假设为SAR图像分割分配参数,并与水平集模型 ...
- 基于水平集的图像分割方法
一.引言 借鉴一些流体中的重要思想, 1988年,Osher和Sethian首次提出了水平集算法[1],这是一种有效解决曲线演化问题的数值方法,并且计算稳定,适宜任意维数空间.随后,Osher等人对水 ...
- 水平集与图割算法浅析
LeveSet 水平集方法主要的思想是利用三维(高维)曲面的演化来表示二维曲线的演化过程.在计算机视觉领域,利用水平集方法可以实现很好的图像分割效果. 1.数学原理 根据维基百科的定义,在数学上一个包 ...
最新文章
- 1.为什么使用spring boot
- 分布式存储MooseFS的搭建
- es springboot 不设置id_springboot整合ES_文档ID删除
- html页面 wordpress,WordPress纯代码实现前端页面HTML完美压缩
- PV EV AC BAC EAC ETC等计算公式
- Linux 内存管理之 SLUB分配器(6):slub debug 实例测试
- 设计模式和java实现
- rtnetlink组数量与设置
- php求1000以内的素数 10个一行,1000以内的素数_php求1000以内质数
- 卡尔曼滤波器工作原理
- reimage repair-打开网页总是自动跳转要你下reimage repair
- CodeRunner破解
- 编写Java程序,使用抽象类和抽象方法构建不同动物的扑食行为,抽象类设计
- word,Excel等office中鼠标不停闪动的解决方法
- Redis过期时间及过期策略
- iOS拍照识别车牌技
- 咸鱼Micropython—LED用法
- 我的2018——最美的年龄为最纯的梦想尽最大的努力
- 移植Opencv到arm tq2440
- VMware Workstation 15 Pro 秘钥
热门文章
- Python修仙之路 —— 类变量在实例方法和类方法的调用方式
- 什么是包含块,对于包含块的理解?
- DOM--操作元素案例:分时显示不同的图片以及问候语;仿淘宝关闭标签案例;隐藏显示文本框内容;仿新浪注册页面中密码长度的判定
- Loader技术原理
- VMware创建Windows虚拟机与优化
- SystemC: sc_bv and sc_uint
- 在Vue中获取DOM元素的实际宽高
- 如何利用Python和win32编程避免重复性体力劳动(二)——菜单操作:GetMenu,GetSubMenu,GetMenuItemID以及wParam的HIWORDLOWORD
- multiprocessing.Pool报pickling error
- Android-彻底解决启动白屏、跳转页面白屏!