1. Snake模型

人为地在图像感兴趣的区域(ROI)上给出初始轮廓曲线,最小化一个能量函数,使轮廓曲线在图像中运动(变形),最终逼近该区域的边界。

v(s)=[x(s),y(s)]为活动轮廓线,s∈[0, 1]是弧长,其能量函数为:

曲线能量的第一项是曲线的一阶导和二阶导,为曲线的内部能量,其中一阶导为连续能量,控制连续;二阶导到为曲率能量,控制平滑。能量的第二项是外部能量,一般为下面的形式:

其中Eimage为轮廓与图像特征之间的吻合程度,如Eimage(v(s))=±[▽Gσ(x,y)*I(x, y)]2等;Econ:控制能量,来源于先验知识和用户本身。

2. Snake模型求解

由欧拉公式(变分法),使Esnake最小必须满足:

αv''(s)-βv''''(s)-▽Eimage(v(s))-▽Econ(v(s))=0

v(s)=[x(s), y(s)],上式可化为:

将导数用差分近似:

写成矩阵形式:

A为五对角循环矩阵,a=2α+6β,b=-(α+4β),c=β 。

利用梯度下降法,可得

解得:

3. 代码

使用说明:

  1. matlab编写,需要在matlab下运行。
  2. matlab文件路径下需要有一个名为 test.jpg 的 uint8 类型的二维灰度图,该图片即为需要分割的图片。
  3. 运行时,在matlab命令行直接输入m文件名称,然后将会显示出  test.jpg  图片,需要在该图片上手动画出初始轮廓。画初始轮廓线时,鼠标点击图片中的几个位置,程序会以直线段的方式将这个几个点连接起来,作为初始轮廓线。画好后,关闭图片,然后在命令行按 enter 键,让程序继续运行。
  4. 未设置迭代的终点,默认为400次迭代,若没有收敛自行更改迭代次数。

代码如下:

% 基本Snake活动轮廓模型

I=imread(‘test.jpg’); % 读入的图片应为uint8类型二维的灰度图
snake(I); % 对图像I求其中需要分割物体的snake边界

function snake(I)
% Snake主体部分

alpha=0.5; beta=0; % 连续参数alpha=0.5;平滑参数beta=0;步长为1
[x,y]=DrawLine(I); % 在图像I上手动画线,得到初始轮廓线

a=2*alpha+6*beta; b=-(alpha+4*beta); c=beta;
J=[c b a b c]; h=max(size(x));
A=diagCyclMat(h,J); % 求取设定参数下的五对角循环矩阵

II=eye(h); [m,~]=size(I); % 初始化
I=double(I);

I1=-ff(I); % 高斯势能I1
[I2x,I2y]=NGradient(I1); % I1的负梯度I2
T=max(max(abs(I2x(

Snake活动轮廓模型Matlab实现相关推荐

  1. Snake活动轮廓模型

    1. Snake模型 人为地在图像感兴趣的区域(ROI)上给出初始轮廓曲线,最小化一个能量函数,使轮廓曲线在图像中运动(变形),最终逼近该区域的边界. 设v(s)=[x(s),y(s)]为活动轮廓线, ...

  2. [家里蹲大学数学杂志]第054期图像分割中的无边缘活动轮廓模型

    $\bf 摘要$: 本文给出了王大凯等编的<图像处理中的偏微分方程方法>第 4.4 节的详细论述. $\bf 关键词$: 图像分割; 活动轮廓模型; matlab 编程 1 模型的建立 在 ...

  3. 基于Opencv3的活动轮廓模型--CV, RSF and DRLSE

    本人把CV, RSF and DRLSE等经典的活动轮廓模型转化成了基于C++,Opencv3版本的代码,仅供参考.代码的运行效率比matlab快一个数量级. CV模型.源代码下载地址:http:// ...

  4. 基于Python3.6和Opencv3的活动轮廓模型--CV和RSF

    目前网上能找到的活动轮廓代码大都是matlab版本的,我把它转化成了基于Python3.6和Opencv3版本的代码,仅供参考.注,代码的运行效率并不高,感觉没matlab快. CV模型.源代码下载地 ...

  5. 主动轮廓模型 matlab,主动轮廓模型的功能.ppt

    主动轮廓模型的功能 Amelioration d'images ultrasonores via alignement de vasculature - Julien Jomier - UNC - 2 ...

  6. cxcy在c语言中表示坐标,c – OpenCV 3.0中的活动轮廓模型

    我正在尝试使用C语言中的Opencv 3.0实现Active Contour Models算法. 这个算法基于我为MatLab编写的脚本,并没有按预期工作. 这两个图像显示了两种算法运行的结果. Ma ...

  7. 《Matlab图像处理》part1 Snakes:Active Contour Models 主动轮廓模型

    <Matlab图像处理>part1 Snakes:Active Contour Models 主动轮廓模型 参考博客: 数字图像处理-图像分割:Snake主动轮廓模型 Matlab代码及运 ...

  8. Active Contour Models 主动轮廓模型

    参考博客: https://www.mathworks.com/matlabcentral/fileexchange/19567-active-contour-segmentation 数字图像处理- ...

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

    水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...

  10. 基于Matlab的3-D胸部扫描CT切片的肺部分割——使用活动轮廓(snakes)进行三维分割及建模

    目录: 一.准备数据 二.肺部分割 三.创建种子MASK掩膜并使用活动轮廓(snakes)分割肺部 四.计算分割肺的体积 例程完整源码: 参考链接 本例程配套完整源码和数据下载 此示例显示了如何使用活 ...

最新文章

  1. 7000p可以加装固态吗_解惑丨地暖不热加装循环泵可以吗?
  2. 牛客华为机试第3题python
  3. MYSQL 练习题
  4. python自学步骤-零基础学Python应该学习哪些入门知识及学习步骤安排
  5. php入门02-数组
  6. Zookeeper C API 基本常量和结构体介绍
  7. C++基础::类设计的几大原则
  8. RHCE系列之权限管理----ACL(访问控制列表)
  9. MySQL-快速入门(14)MySQL性能优化
  10. Jenkins checkout的文件 , TortoiseSVN 无法提交。 问题已经解决啦!
  11. 计算机桌面无法新建文件夹,Win7桌面不能新建文件夹和修改文件名怎么办?
  12. 「工具箱」套模板让项目管理更容易
  13. 计算机存储器的分类图片,存储器分类及各自特点有哪些
  14. raw图各个格式之间的转换
  15. 《平台战略:正在席卷全球的商业模式革命》有感
  16. 台式计算机怎么截屏,台式电脑,怎么截图全屏?
  17. 任正非、俞敏洪告诫有赞的老板白鸦:你错的离谱
  18. postgresql: pg_ctl -D data start 出现 postgres aaaaaaaaaaaaaaaaaaaaaaaaa C:/Users/huang zhen yang/dat
  19. 开发者自己搭建IM服务器所要面临的问题
  20. Luogu 2495 [SDOI2011]消耗战

热门文章

  1. 医院绩效考核管理平台建设方案
  2. 51c语言延时作用,51单片机C语言延时函数的使用 - 51单片机C语言延时函数怎么定义和使用...
  3. resnet网络结构图
  4. 操作系统-io设备基本概念和分类
  5. lldp协议代码阅读_LLDP 链路层发现协议
  6. python之爬取中华诗词网
  7. 电商营销方式抢购,秒杀Redis原子减decr方法作为剩余库存判断条件的实现方式(1)
  8. 地图上导出坐标html文件格式,【教程】奥维地图如何导出含坐标的高清tiff影像图,实现ArcGIS加载使用...
  9. python numpy库下载_Numpy库的下载与安装总结
  10. 清华同方计算机配置情况,清华同方计算机还原卡安装使用说明