水平集和符号距离函数

零水平集

定义: 对于一个函数 ϕ(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}(1)\Gamma = \{ \vec x|\phi (\vec x) = 0\} \tag{1} Γ={x∣ϕ(x)=0}(1)

这里, Γ∈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(inandout)\left\{ \begin{aligned}\tag{inandout} &\phi > 0&&\vec x \in {\Gamma_{in}}\\ &\phi < 0&&\vec x \in {\Gamma_{out}}\\ \end{aligned} \right.{​ϕ>0ϕ<0​​x∈Γin​x∈Γout​​(inandout)

这里, Γin\Gamma_{in}Γin​ 表示 Γ\GammaΓ 内部, Γout\Gamma_{out}Γout​ 表示 Γ\GammaΓ 外部。那么,对于任意的 x⃗∈Γ\vec x \in \Gammax∈Γ , ϕ\phiϕ 有如下两个性质:

  • 性质一:∇ϕ∣∇ϕ∣=−n⃗(zlsp1)\tag{zlsp1} \frac{{\nabla \phi }}{{|\nabla \phi |}} = - \vec n∣∇ϕ∣∇ϕ​=−n(zlsp1)
    Proof. 如图所示,设 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∣∇ϕ∣∇ϕ​=−n

  • 性质二:div(∇ϕ∣∇ϕ∣)=−trace(∇⋅n⃗)=−κ(zlsp2)\tag{zlsp2} {\rm{div}}(\frac{{\nabla \phi }}{{|\nabla \phi |}}) = -\text{trace} (\nabla\cdot \vec n) = -\kappadiv(∣∇ϕ∣∇ϕ​)=−trace(∇⋅n)=−κ(zlsp2)
    Proof.
    ϕ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 ,由上一个性质,有 ∇ϕ⋅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​
    将其左端展开,即证。

性质二本质上就是曲率的定义。因为曲率是 Weingarten Map ∇n⃗=∇2d\nabla \vec n=\nabla^2 d∇n=∇2d 对角线上的元素。这里的 ddd 提前说了,它表示距离函数。另外,Weingarten Map 和 n⃗\vec nn 也是垂直的,即 ∇2d∇d=0\nabla^2 d \nabla d=0∇2d∇d=0。

符号距离函数

符号距离函数 (Signed Distance Function) 是一个水平集函数,它给定了点到某条曲线上距离这个点最近点的距离,也可以说是这个点离曲线的最短距离,它在数学上可以这样表述:

在某区域上给定一条曲线 Γ\GammaΓ ,定义与之相关的函数:
d(Γ,x⃗)={min⁡y⃗∈Γ∣x⃗−y⃗∣x⃗∈Γin−min⁡y⃗∈Γ∣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∈Γin​x∈/​Γ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(sdfp1)\tag{sdfp1} |\nabla d| = 1∣∇d∣=1(sdfp1) 这也是符号距离函数的一个判断条件,它是充要的。

  • 对于任意的 x⃗∈Γ\vec x \in \Gammax∈Γ ,由水平集函数的性质可得:
    ∇d=−n⃗⋅∣∇d∣=−n⃗Δd=−κ∣∇d∣=−κ(sdfp2)\tag{sdfp2} \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∣=−κ​​(sdfp2)

第二条的拉普拉斯算子 Δd\Delta dΔd,本质上就是 ddd 的 Hessian ∇2d\nabla^2 d∇2d 对角线上的元素,即曲率。

水平集和符号距离函数相关推荐

  1. 计算机视觉——符号距离函数SDF

    符号距离函数Signed Distance Function是某度量空间X中的一个集合Ω\Omega的函数,决定X中任一点到 Ω\Omega边界∂Ω\partial \Omega的距离,并且由x是在Ω ...

  2. AOS加性算子分裂法

    AOS加性算子分裂法 加性算子分裂法顾名思义,就是在不同维度上分开讨论,最后相加.需要不同维度上正交. 图像分割能量函数经过梯度下降法得到的的迭代公式一般为: ∂ϕ∂t=μδϵ(ϕ)∇.(∇ϕ∣∇ϕ∣ ...

  3. 基于水平集方法和G0模型的SAR图像分割

    基于水平集方法和G0模型的SAR图像分割 Abstract(摘要) 这篇文章提出了一种分割SAR图像的方法,探索利用SAR数据中的统计特性将图像分区域.我们假设为SAR图像分割分配参数,并与水平集模型 ...

  4. level set 介绍4(水平集方法)

    2.5 水平集方法 在2.4中的时候,我们已经知道曲线演化主要涉及到两个几何参数,一个是曲线的曲率,一个是曲线的方向矢量,而这两个参数的计算一并不是一件容易的事情,怎么有效的更方便处理曲线的几何参数的 ...

  5. 基于水平集的图像分割方法

    一.引言 借鉴一些流体中的重要思想, 1988年,Osher和Sethian首次提出了水平集算法[1],这是一种有效解决曲线演化问题的数值方法,并且计算稳定,适宜任意维数空间.随后,Osher等人对水 ...

  6. 水平集详解与代码分析一

    前面我们从大体上描述了一下水平集方法的思想,实际上,各种水平集方法的区别只是在于如何构建能量函数E(C).当构建好能量泛函E(C)之后,通过水平集的思想,将曲线C用水平集函数Φ代替,再通过求解能量泛函 ...

  7. 水平集算法matlab实现

    http://forum.vibunion.com/thread-24651-1-1.html function phiy = activecontourCV( u0, center, radius, ...

  8. 卷积神经网络结合水平集方法

    水平集方法用于深度卷积网络 水平集简介 CNN结合Level Set 疑惑 水平集简介 水平集(Level Set)方法是用于图像分割非常受欢迎的方法,其通过比目标维度高一维的水平集函数(LSF)的零 ...

  9. 水平集方法的一个基本框架

    水平集方法框架 水平集方法是现代图像处理中很重要的一个方法,为了说清楚这个东西,我们先介绍几个基本的概念. 零水平集 对于一个函数 ϕ(x⃗):Rn→R\phi(\vec x):{\mathbf{R} ...

最新文章

  1. 怎样在ROS下实现基于YOLO的px4无人机目标检测?
  2. android常见错误-Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
  3. ProGuard的返回错误代码1。异常的解决方法
  4. python request-python3的request用法实例
  5. 部署node_如何使用 docker 高效部署 Node 应用
  6. java继承和派生4.4- 4.52020.3.24
  7. tomcat 默认站点的配置
  8. Docker基本使用方法(build image \run...)
  9. 开源项目之Windows读取Ext4分区的工具 Ext2Read
  10. matlab 盲源信号分离,基于盲源分离的图像噪声滤除的研究(附Matlab仿真程序)☆
  11. win10解除usb禁用_Win10系统禁用usb存储设备的设置方法
  12. CleanMyMac最新2020注册机
  13. [好文精选] Behance 2019 设计趋势
  14. 用nodejs爬数据
  15. 2022年9月电子学会Python等级考试试卷(二级)答案解析
  16. OBD-II协议对比介绍
  17. 代理专利申请流程包括哪些阶段及费用多少钱?
  18. xshell工具将服务器文件下载到本地
  19. linux系统配置X11
  20. ArcGIS根据经纬度在地图上添加坐标点

热门文章

  1. 2020-12-02 Centos8.2邮件服务器搭建攻略!一文吃透Postfix+Dovecot+MySQL!
  2. java怎么给表格设置行间距_java – iText列表项或JTextArea中的行间距
  3. oracle 怎么复制表,oracle数据库如何复制表到新表?-Oracle
  4. 配置nginx伪静态
  5. 数组和字符串的相互转换---------数组转换为字符串
  6. 2019年考研总结与新一年的展望
  7. php 简转繁体,php 繁体字转化为简体字
  8. ADSP21489数据手册表摘要
  9. 互感器的同名端和正负极性(一次和二次侧的电压电流和方向的确定要求电磁学理论应用于实际线圈的物理属性,交变的电磁场互相产生公式,麦克斯韦方程,不用再深究)
  10. 2008.04.12 腐败