DRLSE 水平集算法总结

背景:

Level Set方法是美国数学家Osher(加州大学洛杉矶分校)和Sethian(加州大学伯克利分校)合作提出的。后者因为对Level Set的贡献获得了去年美国数学会与工业应用数学会联合颁发的维纳奖。遗憾的是这两位Level Set的开创者现在正为争夺Level Set的名誉而对簿公堂。

Level Set方法是他们在98年文章"Front Propagation with
Curvature Depedent Speed: Algorithms Based on Hamilton-Jacobi
Formulation"中第提出的。这个方法提出以后被成功地应用于流体力学,计算机图形学,材料科学等领域。应用于图像处理和计算机视觉始于93年Caselles等人和95年Malladi等人的两篇著名文章。他们用Level Set来表示Snakes,想法很简单:一个平面上的曲线可以表示成一个二元函数z=f(x,y)的零点集合(Zero
Level Set),既这个二元函数z=f(x,y)所表示的三维曲面与xy平面的交线。更一般地,任何N维曲面都可以表示为一个N+1维曲面与一个N维超平面的交集,或称为N+1维曲面在一个N维超平面上的投影。相对最早的Snake(用参数化的曲线,所以也叫parametric active
contour),用level
set表示的活动曲线叫着Geometric
Active Contours。

用二维曲面与二维平面的交线表示曲线,这在微积分甚至中学数学里都是很平凡的。但是,当我们要描述曲线运动的时候,用Level Set表示曲线就有很明显的优点。比如说,几条曲线在运动中merge成一条曲线,或一条曲线分裂成几条曲线,这样的拓扑变化是不可能表示成一条连续的参数化曲线的运动。原因很简单,一条连续的参数化曲线是用一个一元连续函数来卞表示的,它显然不能表示几条分开的曲线(这与连续性矛盾)。

然而,以上所说的曲线的拓扑变化却可以简单地表示成一个连续变化的的曲面与一个固定的平面的交线。这个曲面本身可以不发生拓扑变化,它可以始终是一个连续的二元函数z=f(x,y)的图象。这样,复杂的曲线运动就可以简单地表示成一个更高一维的函数的演化,这可以用一个发展方程(evolution
equation)来描述,数学里已经有很多工具可以用了。
再接着说说level set吧。我这次参加CVPR,遇到很多人都说level
set很难。我甚至还听说有个做snake很有名的教授对level
set很反感。说实话,我在去年开始实现别人的level set方法时,也对level
set越来越讨厌。原因是:现有的level set方法实现跟理论不一致(这在Gomes和Faugeras的文章里已经指出),需要搀杂不少remedies,比如最令人讨厌的re-initialization。还有一些步骤,比如velocity
extension,都不是让人赏心悦目的东西。这些步骤就象长在人身上的赘肉或瘤,也许是良性的,但总是让人看着极不舒服,甚至怕它恶化。

但是,还是有些人能把这样复杂而且不是那么优美的方法实现出来,而且用得不错,具有其它很多方法不具备的优点,比如让曲线自然地split和merge。象任何一种理论和方法一样,尽管有缺点(比如re-initialization),但毕竟大家还是看到了它的巨大潜力。所以这还是成为一个很热的研究方向。

图像分割问题:

偏微分方程图像分割:

近年来,基于偏微分方程的图像分割方法称为研究热点,其中KASS等在1988年发表的论文,Snakes:Active contour models 在图像分割领域影响深远。该模型将图像分割问题转化为一个能量泛函极小值问题。通过变分法,将泛函极值问题转化为对偏微分方程的求解。然后把偏微分方程的极小解作为图像分割的结果。目前,偏微分方程的分割方法主要有参数活动轮廓模型和几何活动轮廓模型。

levelset方法:

Level Set方法的基本思想是将平面闭合曲线隐含地表达为二维曲面函数的水平集,即具有相同函数值的点集,通过Level
Set函数曲面的进化隐含地求解曲线的运动.尽管这种转化使得问题在形式上变得复杂,但在问题的求解上带来很多优点,其最大的优点在于曲线的拓扑变化能够得到很自然的处理,而且可以获得唯一的满足熵条件的弱解.

结合:

几何活动轮廓模型与水平集的结合的曲线演化方法。

该方法利用高维函数曲面,来表达低维的演化曲线或曲面,即,将演化的曲面或曲线嵌入到高维函数表示的曲面中。将演化方程转化为高维水平集函数的偏微分方程。从未避免参数化过程。故,水平及方法将几何活动轮廓模型的演化转化为,水平集函数的偏微分方程的表达式的,数值解的过程。

基本理论: just plain easy to understand: there is a
surface, it intersects a plane, that gives us a contour and that‘s it. With
image segmentation, the surface is updated with forces derived from the image.

符号距离函数的重新初始化:

finet=sgn(fine0)(1-|deltafine|);

fine(x,0)=fine0;

目的:数字纠错

重新初始化:迭代fine符号距离函数

速度函数:水平集方法进行边界轮廓提取的关键是根据实际问题的需要选取合适的速度函数F,F一般为与图像相关的项(梯度信息)以及与轮廓曲线的几何形状有关的项(曲率)的函数

其中,F表示曲线上各点的演化速度,方向沿着曲线的法线方向,通常与图像梯度和曲线曲率有关。我们想要分析和计算的是在速度F的作用下,曲面随后的演化情况。从式(2)可以看出,只要速度F变化平滑,则妒(菇,Y,t)始终保持是一个光滑函数,零水平集始终与运动曲面相对应,曲面的拓扑变化可以很容易地描述。对于不同的分割模型,速度F表达式也不相同,从而出现了多种基于水平集的图像分割方法。另外,可以看出式(2)对任意维数的曲面演化都适用。曲线的几何特性也可以很容易地从水平集函数妒(髫,,r,t)得出,譬如,曲线C上各点的

限差分法,梯度:求导

MS-MUMFORD-SHAH模型:

包括对区域和边界的描述

H是Hausdorff测度:H0表示点数,H1:表示长度,H2:表示面积

其中第一项称为数据项或忠诚项,保证近似图像u
保留观察图像I
的主要信息;第二项称为近似图像的正则项,保证图像的光滑性,在观察图像有噪声时,正则项有去除噪声的作用;C 表示目标轮廓的长度;α 、β
为非负常数,平衡各项在能量中的权重。由于Mumford-Shah
能量泛函难以求解,许多学者给出了近似模型,最简单的是Chan 和Vese
提出的两相分片常数能量泛函:

不需要重新初始化的

时间: 2024-10-21 19:25:14

DRLSE 水平集算法总结的相关文章

计划:怎样学习在图像分割中水平集算法

水平集方法由 Osher 和 Sethian 于 1988 年提出[1],最初应用于流体力学领域,后被广泛应用于各种同曲线演化相关的科学研究和工程领域.1997 年Caselles等人率先将这一理论应用到图像科学领域后,开始了基于水平集方法的图像处理技术的研究. 为了提高分割的稳健性,先后提出了基于边界边缘的几何轮廓线模型.基于区域的几何轮廓线模型.基于先验形状知识的几何轮廓线模型,纹理图像分割模型.运动图像的分割分割模型及这些模型集成化的图像分割模型.多模型成分集成是近年该学术流派发展的重要趋

计划:怎样理解水平集方法 ITK Level set V4 框架介绍

简易解释:在曲面中插入一个平面所形成的轮廓,即是该轮廓的水平集表示,可见,该轮廓的水平集表示有多个.对于图像分割,在图像力的驱动下曲面进行更新. 轮廓的数学表达有隐式和显式两种表达.用曲面演化代替Front (C)演进. C(t) = {(x, y)|φ(x, y, t) = 0} ?φ/ ?t + F|?φ| =0 (1) φ(x, y, 0) = φ0(x, y) 方程的本质是什么? 几何解释是什么 edge-based level set ?φ /?t = g(?I)|?φ| (div (

水平集方程的推导

body { font-family: 微软雅黑; font-size: 14pt; line-height: 1.5; } html, body { color: ; background-color: ; } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { font-size:1.3em; font-weight:bold; } h4 { font-size:1.

水平集群和垂直集群的区别!

我很笨,今天才搞明白什么是水平集群.什么是垂直集群. 垂直集群就是一台机器上安装多个应用服务器.或者说在同一台服务器上做集群,大概就是这样: 水平集群就是多台机器上安装多个应用服务器,或者说在多台硬件服务器了,大概就是这样: .... 语言表达能力越来越差,写字越来越难看,基本是废了.

【algorithms IV】带权重的并查集算法

问题 普通的Union-find并查集算法没有加入权重, 可以构造特别的输入使得每次合并的时候高的树HighTree以低的树LowTree的根[root(LowTree)]为新的根, 造成树的不平衡,从而使得效率下降. 用一个新的数组标记节点当前的高,可以用来在合并的时候减少时间. 当然了,这种方法的空间复杂度会提高一倍,看实际情况使用了. public class WeightedQuickUnionUF { private int[] id; // parent link (site ind

快速搞定并查集算法

目录 算法介绍 wiki 通俗解释 算法实现(C语言) 算法实战 算法介绍 wiki 并查集 通俗解释 零基础学并查集算法 算法实现(C语言) Find函数(未采用路径压缩) int Find(int x) { int r = x; while(pre[r] != r) { r = pre[r]; } return r; } Find函数(路径压缩递归实现) int Find(int x) { if(pre[x] == x) return x; else { pre[x] = Find(pre[

并查集算法详解

更好的阅读体验 并查集算法详解 算法详解 维护类型 身为一个数据结构,我们的并查集,它的维护对象是我们的关注点. 并查集适合维护具有非常强烈的传递性质,或者是连通集合性质. 性质详解 传递性质 传递性,也就是具有传递效应的性质,比如说A传递给B一个性质或者条件,让B同样拥有了这个性质或者条件,那么这就是我们所说的传递性. 连通集合性质 连通集合性,和数学概念上的集合定义是差不多的, 比如说A和B同属一个集合,B和C同属一个集合,那么A,B,C都属于同一个集合.这就是我们所谓的连通集合性质. 算法

Union-Find 并查集算法

一.动态连通性(Dynamic Connectivity) Union-Find 算法(中文称并查集算法)是解决动态连通性(Dynamic Conectivity)问题的一种算法.动态连通性是计算机图论中的一种数据结构,动态维护图结构中相连信息.简单的说就是,图中各个节点之间是否相连.如何将两个节点连接,连接后还剩多少个连通分量.有点像我们的微信朋友圈,在社交网络中,彼此熟悉的人之间组成自己的圈子,熟悉之后就会添加好友,加入新的圈子.微信用户有几亿人,如何快速计算任意两个用户是否同属于一个圈子呢

零基础学并查集算法

并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了.以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定.不分享出来真是对不起party了.(party:我靠,关我嘛事啊?我跟你很熟么?) 来看一个实例,杭电1232畅通工程 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的.最后要解决的是整幅图的连通性问题.比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块.像畅通工程这题,问还需要修