水平集方法引入主动轮廓模型算法中的两种方法

  • 1、传统的基于主动轮廓模型和水平集理论的方法
  • 2、变分水平集方法

在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流程图。

1 构建能量泛函
2 获得用于演化的偏微分方程
3 离散化偏微分方程
4 代码实现与调试

这四个步骤基本上贯穿了整个从思路构建到具体实现的大致流程,早期的snake模型本质上是用一种曲线演化的思想来实现分割,这种方法具有很大的局限性(以后我会在单讲水平集方法的时候进行分析),对比之下,水平集方法则具备较强的优势,而根据水平集方法在上述流程图中引入步骤的不同,我们把水平集方法在主动轮廓模型中的应用分为如下两类:传统的基于主动轮廓模型和水平集理论的方法和变分水平集方法。

1、传统的基于主动轮廓模型和水平集理论的方法

其中传统的方法则是在获得步骤二中的用于演化的偏微分方程后再引入水平集方法,如下图所示

1 构建能量泛函
2 获得用于演化的偏微分方程,引入水平集方法
3 离散化偏微分方程
4 代码实现与调试

比如针对某一几何活动轮廓模型,我们有如下PDF驱动曲线演化:
∂c∂t=g(u)N(1)\frac{\partial c}{\partial t}=g(u) N \tag{1}∂t∂c​=g(u)N(1)
其中ccc代表演化曲线,g(u)g(u)g(u)用于控制曲线的演化速度(u可以理解为目标曲线所在图像),NNN则表示内单位法向量。
将曲线c(t)c(t)c(t)引入三位水平集函数ϕ(x,y,t)\phi(x,y,t)ϕ(x,y,t)的零水平集(ZLS)则可得:
ϕ(c(t),t)=0(2)\phi(c(t), t)=0 \tag{2} ϕ(c(t),t)=0(2)对公式(2)中ttt求导可得
∇ϕ⋅∂c∂t+∂ϕ∂t=0(3)\nabla \phi \cdot \frac{\partial c}{\partial t}+\frac{\partial \phi}{\partial t}=0 \tag{3}∇ϕ⋅∂t∂c​+∂t∂ϕ​=0(3)这样我们就找到了曲线演化和水平集函数演化之间的对应关系:∂ϕαt=−∇ϕ⋅∂c∂t=−∇ϕ⋅g(u)⋅N(4)\frac{\partial \phi}{\alpha t}=-\nabla \phi \cdot \frac{\partial c}{\partial t}=-\nabla \phi \cdot g(u) \cdot N \tag {4}αt∂ϕ​=−∇ϕ⋅∂t∂c​=−∇ϕ⋅g(u)⋅N(4)而对于三维水平集函数,其梯度方向则必然与零等势面即零水平集切线方向垂直,所以在假定水平集函数内负外正的情况下,我们可以切线方向可表示为:
N=−∇ϕ∣∇ϕ∣(5)N=-\frac{\nabla \phi}{|\nabla \phi|} \tag {5}N=−∣∇ϕ∣∇ϕ​(5)将式(5)进一步引入式(4)中,即可得
:∂ϕαt=−∇ϕ⋅∂c∂t=−∇ϕ⋅g(u)⋅(−∇ϕ∣∇ϕ∣)=g(u)∣∇ϕ∣(6)\frac{\partial \phi}{\alpha t}=-\nabla \phi \cdot \frac{\partial c}{\partial t}=-\nabla \phi \cdot g(u) \cdot (-\frac{\nabla \phi}{|\nabla \phi|}) = g(u)|\nabla \phi| \tag {6}αt∂ϕ​=−∇ϕ⋅∂t∂c​=−∇ϕ⋅g(u)⋅(−∣∇ϕ∣∇ϕ​)=g(u)∣∇ϕ∣(6)至此,基于曲线演化得偏微分方程已经被新的基于水平集函数的偏微分方程完全取代。

2、变分水平集方法

而第二种在引入水平集的方法则是直接在步骤1构建能量泛函中引入水平集函数,然后利用变分法求解能量泛函极值,这种方法则称之为变分水平集方法。

1 构建能量泛函,引入水平集方法
2 获得用于演化的偏微分方程
3 离散化偏微分方程
4 代码实现与调试

比如对于经典的基于区域的Chan-Vese模型,其核心思想是构造一个包含目标曲线的能量泛函E=E1(C)+E2(C)=∫inside(C)∣I0(x,y)−C1∣2dxdy+∫outside(C)∣I0(x,y)−C2∣2dxdyE = E_1(C) + E_2(C) = \int_{inside(C)}{|I_0(x,y)-C_1|^2}\,{\rm d}x{\rm d}y + \int_{outside(C)}{|I_0(x,y)-C_2|^2}\,{\rm d}x{\rm d}y E=E1​(C)+E2​(C)=∫inside(C)​∣I0​(x,y)−C1​∣2dxdy+∫outside(C)​∣I0​(x,y)−C2​∣2dxdy其中E1(C)E_1(C)E1​(C)和E2(C)E_2(C)E2​(C)则分别代表曲线内和曲线外能量,E1(C)E_1(C)E1​(C)和E2(C)E_2(C)E2​(C)分别对应图中F1(C)和F2(C)F_1(C)和F_2(C)F1​(C)和F2​(C),根据下图可以很容易判断,当曲线达到目标边缘时,能量函数取得极小值,
因此,其演化本质就是利用演化曲线内像素和跟曲线外像素和的差作为动力驱动曲线向目标边缘演化。
和第一节引入水平集函数的方法不同,其在构造能量函数这一步就引入了水平集函数,引入水平集函数后,并加上λ1\lambda 1λ1和λ2\lambda 2λ2所代表的正则项后的能量函数则如下:F(ϕ(x,y))=μ∫Ω∣∇H(ϕ(x,y))∣dxdy+ν∫ΩH(ϕ(x,y)dxdy+λ1∫Ω∣I0(x,y)−C1∣2H(ϕ(x,y)dxdy+λ2∫outside(C)∣I0(x,y)−C2∣2(1−H(ϕ(x,y))dxdyF(\phi(x,y)) =\mu \int_\Omega{|\nabla H(\phi(x,y))|}dxdy + \nu \int_\Omega{H( \phi(x,y)}dxdy \\ + \lambda_1 \int_{\Omega}{|I_0(x,y)-C_1|^2 H( \phi(x,y)}\,{\rm d}x{\rm d}y + \\ \lambda_2 \int_{outside(C)}{|I_0(x,y)-C_2|^2 (1-H( \phi(x,y))}\,{\rm d}x{\rm d}yF(ϕ(x,y))=μ∫Ω​∣∇H(ϕ(x,y))∣dxdy+ν∫Ω​H(ϕ(x,y)dxdy+λ1​∫Ω​∣I0​(x,y)−C1​∣2H(ϕ(x,y)dxdy+λ2​∫outside(C)​∣I0​(x,y)−C2​∣2(1−H(ϕ(x,y))dxdy,然后进行第二步,根据变分法和梯度下降流来求解泛函极值就可以获得如下的演化方程∂ϕ∂t=δϵ(ϕ)[μdiv(∇ϕ∣∇ϕ∣)−ν−λ1(I−C1)2+λ2(I−C2)2]\frac{\partial \phi}{\partial t} = \delta_{\epsilon}(\phi)[\mu div(\frac{\nabla\phi}{|\nabla\phi|})-\nu - \lambda_1(I-C_1)^2+\lambda_2(I-C_2)^2]∂t∂ϕ​=δϵ​(ϕ)[μdiv(∣∇ϕ∣∇ϕ​)−ν−λ1​(I−C1​)2+λ2​(I−C2​)2],最后将上述演化方程离散化后,就可以进行编写代码啦!
具体有关利用Chan-Vese模型进行曲线演化的方法可以参见我的另一篇博客基于区域的主动轮廓模型_从零到一用python实现Chan-Vese(CV)算法。

水平集方法引入主动轮廓模型算法中的两种方法相关推荐

  1. 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set(utf-8)两种方法)

    两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法) 升级到Qt5.X之后 ...

  2. MATLAB 保存imshow绘制图片到指定文件夹中的两种方法

    MATLAB 保存imshow绘制图片到指定文件夹中的两种方法 imwrite函数 imwrite(image,filename) imwrite(image,filename)是将图像数据image ...

  3. 创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积

    创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周长和面积 publi ...

  4. 90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 在 Rectangle类中添加两种方法分别计算矩形的周长和面积 ,编程利用Rectangle输出一个矩形的

    //90页第三题,创建一个 Rectangle类,添加width和lenght两个成员变量 //在 Rectangle类中添加两种方法分别计算矩形的周长和面积 //编程利用Rectangle输出一个矩 ...

  5. mysql数据库导入到excel表格数据_[转载]将EXCEL表格中的数据导入mysql数据库表中(两种方法)...

    今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...

  6. 把EXCEL表格导入到MYSQL中_将EXCEL表格中的数据导入mysql数据库表中(两种方法)...

    今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...

  7. 计算机控制器安装方法,win7正确安装3D视频控制器的两种方法介绍

    win7系统中打开设备管理器可以检查驱动状况,点击其他设备的时候发现一个"3D 视频控制器","3D 视频控制器"是什么?其实一般来说"3D 视频控制 ...

  8. 怎么把html数据导入excel,将网页表格数据导入到Excel中的两种方法

    将网页表格数据导入到Excel中的第一种方法: 第一步,将包括所需表格的网页打开,并按CTRL+C把网址复制到剪贴板,以备下一步使用. 第二步,打开运行Excel软件,单击菜单栏中的"数据→ ...

  9. html表单调用js方法,使用js提交form表单的两种方法

    提交form表单的时候瑶族一些简单的验证,验证完后才能提交,避免无效提交. 1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在前端页面写:有两种方法,一种是用sub ...

最新文章

  1. __MACOSX文件是什么
  2. Python(12)-while语句+赋值运算符号+转义字符
  3. 阿里云商品评价解析功能示例解析
  4. fastcgi_param 详解
  5. 子网规划与组网实验_交换机四种组网方式,你都清楚吗
  6. svn 验证位置失败 Authorization failed
  7. 使用Upida/Jeneva.Net验证传入的JSON
  8. 电子商务的核心是不是计算机技术,电子商务的核心内容是网络营销
  9. Linux内核源码阅读之系统调用mmap()
  10. tensorflow中prefetch最合适的用法
  11. python滤波器信号处理_详解利用Python scipy.signal.filtfilt() 实现信号滤波
  12. Windows下彻底卸载MySQL数据库
  13. LimeWire Basic 4.8.1 for Linux(转)
  14. js:腾讯云播放器无法自动播放的问题
  15. 概率论由相关性求数学期望和方差的公式_概率论与数理统计(马涛)第4章——数学期望与方差.ppt...
  16. 经典:创业的100个成功经验方法谈
  17. 卷尺精度标准_卷尺的精度为多少mm 卷尺测量误差的原因有哪些
  18. Tensorboard报错的解决
  19. html5写花,HTML5 盛放的花朵
  20. 位运算符详解(与,或,非,异或)

热门文章

  1. 大年初六:送Canon佳能相机
  2. 9个应急word简历模板
  3. VMware创建Windows虚拟机与优化
  4. python---excel分配信息配置
  5. LED显示器和LCD显示器的区别
  6. Python:实现gaussian高斯算法(附完整源码)
  7. java中的BitSet学习
  8. 太阳系c语言代码大全,C生万物,编程之本!
  9. 自然语言处理入门学习系列一
  10. 中兴发布国产操作系统开源项目:新支点超凡桌面环境(EX-NDE)