主动轮廓模型snake

article/2025/10/16 8:01:47

原理概述

snake模型将图像分割问题转换为求解能量泛函最小值的问题。主要思路是构造能量函数进行迭代后,轮廓曲线由初始位置逐渐向使能量函数最小(局部极小)的图像边缘逼近,最终分割出目标。

曲线理论

假设一条光滑封闭曲线 C= C ( p ) C(p) C(p),则在点p处有切向量 T ( p ) T(p) T(p)和法向量 N ( p ) N(p) N(p)相互垂直:
在这里插入图片描述
且有 d C d p = T ( p ) \frac{dC}{dp}=T(p) dpdC=T(p), d 2 C d p 2 = k N ( p ) \frac{d^2C}{dp^2}=kN(p) dp2d2C=kN(p), 其中k是曲率。曲线在p处有近似的二阶展开:
C ( p ) = C ( p 0 ) + k 1 d C d p 0 + k 2 d 2 C d p 0 2 C(p)=C(p_0)+k_1\frac{dC}{dp_0}+k_2\frac{d^2C}{dp_0^2} C(p)=C(p0)+k1dp0dC+k2dp02d2C
即:
C ( p ) = C ( p 0 ) + α T ( p 0 ) + β N ( P 0 ) C(p)=C(p_0)+\alpha T(p_0)+\beta N(P_0) C(p)=C(p0)+αT(p0)+βN(P0)
其中法向量决定了曲线的弯曲方向,

算法原理

首先需要人为在图像上给出一组用于控制曲线形状的控制点: v ( s ) = [ x , y ] v(s)=[x,y] v(s)=[x,y],这些首尾相连的点构成一个封闭的轮廓线。v是当前最小能量的位置,在迭代过程中,v会移向下一次能量最小的v’位置。

Snake曲线的能量函数表示为:
E s n a k e = E i n t + E e x t E _{snake}=E _{int}+E _{ext} Esnake=Eint+Eext

E i n t E _{int} Eint是内部能量函数,依赖于轮廓形状:

E i n t = ∫ 1 2 × ( α ( s ) ∣ c ′ ( s ) ∣ 2 + β ( s ) ∣ c ′ ′ ( s ) ∣ 2 ) d s E _{int}=∫{\frac{1}{2} \times (α(s)∣c'(s)∣^2+β(s)∣c''(s)∣^2)ds} Eint=21×(α(s)c(s)2+β(s)c(s)2)ds
由之前的曲线理论我们知道,式中两项的作用
法向量:推动轮廓形状的改变,决定轮廓平滑度
切向量:保持轮廓点的间离

E e x t E _{ext} Eext是外部能量函数,依赖于图像的性质:

E e x t = − ( E m a g + E e x t ) E _{ext}=-(E _{mag}+E _{ext}) Eext=(Emag+Eext)
E i m a g e E _{image} Eimage:灰度能量,决定将轮廓吸引到 暗/亮 的区域
E m a g E _{mag} Emag:梯度能量,将图像推向边缘特征


http://chatgpt.dhexx.cn/article/sIRA6JTo.shtml

相关文章

腾讯电脑管家,vs安装文件报成木马,还能信吗?

今天在公司安装vs2013,安装过程中腾讯公司的产品“电脑管家”提示有新版本,没有犹豫的点了升级,完成后直接在管家主界面上点了“全面体检”按钮,这一点不要紧,报告有一个木马,看紧看一下“详情”&#xff0…

计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决

有些win8系统用户在开机的时候,遇到了黑屏的情况, 整个屏幕上面只有一个闪烁的鼠标光标,导致无法进入到系统桌面,遇到这样的情况该怎么解决呢?现在给大家分享一下Win8电脑开机黑屏只有鼠标光标的具体解决方法吧。 Win8…

解决ValueError: Cannot run multiple SparkContexts at once; existing SparkContext

一、问题描述 创建sparkcontext和SparkSession,连接spark集群时报错,如题ValueError: Cannot run multiple SparkContexts at once; existing SparkContext。 from pyspark.sql import SparkSession from pyspark.sql import functions as F from pysp…

1、Qt线程(二):继承QThread,重写run

一、功能说明 1、通过继承QThread,重写run的方式实现多线程 2、点击“开始”按钮启动子线程,同时通过信号槽的方式给子线程发送“开始”字符串; 3、子线程每隔1秒向主线程发送累加数; 4、点击"停止"按钮&#xff0c…

诡异的RunOnce病毒启动项和神奇的URL Protocol

整理磁盘发现之前有个有趣的流氓招数忘记分享了,每次看到新鲜的东东都感慨黑暗势力的层出不穷的招数,比某些安全厂商是不是自相残杀好多了.电脑日常使用过程中我们经常输入开头为http ftp,点击诸如ed2k的链接,每个链接的背后都会执行相应的功能.如http 通过iexplore.exe,ed2k通…

如何创建水晶报表

开发工具与关键技术:VS与MVC 作者:刘华叶 撰写时间:2019年4月29日 MVC是软件工程中的一种软件架构模式,涉及到的知识点也是相当广泛,而我们在做项目的过程中,总会遇到要制作一些报表,水晶报表就…

java 水晶报表教程_水晶报表 (Crystal Reports 2008)的配置

概要: Crystal Reports(水晶报表)是一款商务智能(BI)软件,主要用于设计及产生报表。水晶报表是业内最专业、功能最强的报表系统,它除了强大的报表功能外。最大的优势是实现了与绝大多数流行开发工具的集成和接口。在VS.Net平台做过报表开发的…

水晶报表教程:手把手教你制作基本报表

ASP.NET水晶报表的学习 这篇文章教你如何在.Net Web应用中使用水晶报表,也可以让你在学习过程中少走一些弯路。为了得到最好的效果,读者最好需要有一些基础的Asp.Net访问数据库的知识以及使用VS.Net的开发经验。 简介 水晶报表可以由很多的方法得到&a…

水晶报表基本使用方法

开发工具与关键技术:VS/MVC 作者:何桂朋 撰写时间:2019年4月22日 Crystal Reports(水晶报表)是一款商务智能(BI)软件,主要用于设计及产生报表。水晶报表是业内最专业、功能最强的报…

php try catch 不处理,如何解决php try catch不起作用的问题

如何解决php try catch不起作用的问题 发布时间:2020-09-22 09:59:14 来源:亿速云 阅读:103 作者:小新 这篇文章主要介绍了如何解决php try catch不起作用的问题,具有一定借鉴价值,需要的朋友可以参考下。希…

try catch执行过程分析

本篇文章带大家聊聊try catch的执行过程,有时候在开发的过程中,try代码里如果出现异常,catch后的步骤还会继续执行吗?以及finally的使用。 下面来分析一下几种使用场景: 场景一: try代码块中出现异常后&a…

面试官问我 ,try catch 应该在for循环里面还是外面?

前言 有个老哥昨天被面试官欺负了,但是是被这个问题(标题)欺负的? 其实是个比较基础的问题,只要有了解过,叙述是非常简单OK的。 只要有初学者觉得有疑惑,那么我相信不止是他一个。 所以&#…

try catch异常捕获

这次我们介绍try catch异常捕获。下面是try catch的语法。 thy catch 的作用就是异常捕获,在一些会报错的地方时的时候才会用到。 例如这个代码,当我们在控制器时输入的不是数字而是其他的文字或者其他符号呢?所以这里程序就会报错&#xff0…

try catch 的作用

不加try catch package com.web; public class Test25 {public static void main(String[] args) {int i 1 / 0;System.out.println("i " i);System.out.println("aaaa");//直接不运行了} }加try catch package com.web;public class Test25 {public …

kotlin try catch使用方法

5 kotlin之 try catch kotlin的try catch比Java更简洁面料采用,使用更方便 val value "10a"var out: Int? null//错误处理try {out Integer.parseInt(value)} catch (e: NumberFormatException) {println("NumberFormatException")println(e.message)…

try catch的作用

try catch的作用:当程序发生错误时,能够保证程序继续执行下去。 用一个简单例子说明: 1:无try catch public static void main(String[] args) { int i; i 2/0; System.out.println(i); System.out.println(1111111111); } 运行结果&…

try catch finally

结论: 1、不管有木有出现异常,finally块中代码都会执行; 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要…

try catch 嵌套

实践测试 在单元测试中写入以下方法: testMain()主方法, out()里面嵌套了两层try catch 异常代码写在内层try中 示例一: Testpublic void testMain(){out();log.info("后续处理业务");}public void out(){//外层trytry {System.out.println("外层输…

try和catch的用法

try 和 catch 是用于处理异常的语句,它们构成了一种异常处理机制。在一个 try 语句中,程序执行一段代码,如果发生了异常,则会被捕获,并转到相应的 catch 语句中进行处理。 例如,在下面的代码中&#xff0c…

try-catch的使用以及细节

文章目录 try-catch的使用以及细节1. 基本语法2. 注意细节快捷键 try-catch的使用以及细节 🎈 Java中提供 try 和catch块来处理异常。try块用于包含可能出错的代码。catch块用于处理try块中发生的异常。可以根据需要在程序中有多个try…catch块。 1. 基本语法 try{…