数字图像处理笔记——Snakes算法、活动轮廓以及水平集(Snakes, active contours, and level sets)

article/2025/11/7 14:04:55

Snakes算法

上一讲我们讲的图像分割算法主要是基于像素的,这一讲主要是基于曲线的。我们希望能得到一个能够包围住图像轮廓的平滑的曲线,snakes算法就是一个很有用的算法。首先我们将曲线的坐标x、y同一用参数s表示,s范围从0-1代表从起点绕曲线一周再回到原点

我们假定初始化的时候这个曲线已经给定,我们定义这个曲线的能量函数,曲线衍进的过程就是让能量函数降低的的过程,能量函数分为外部能量和内部能量

如下是内部能量的定义,内部能量只与曲线的形状有关。能量由两部分组成:一阶导部分与二阶导部分。一阶导代表曲线的“弹性”,也就是曲线是否被拉伸的非常长;二阶导代表曲线曲折程度,也就是曲线是否弯曲不平滑。曲线弹性越低,弯曲越少能量越低

第二部分是曲线的外部能量,代表曲线与边缘的重合程度。重合程度大的时候能量低。

我们有了能量函数以后如何求它的最小值呢?这涉及到变分法,在此就不细讲了。对于数字图像,我们一般用一定数量的点对曲线进行逼近,之后我们可以用梯度下降法来求得函数的最小值

在曲线衍进的时候还需要注意有时我们需要对曲线的点进行重排(再采样)来保证下一次循环(衍进)时我们有更好的效果

当然这种方法也存在问题,我们的活动轮廓无法看到远处的边缘,因此当周围像素值都差不多的时候曲线可能不会继续向内收敛;第二点是当图像中存在噪声时轮廓很可能和噪声点重合。为了解决这个问题我们可以对图像先进行模糊处理,这相当于将原本的边界变得更加模糊了(即扩大的边界的影响范围),这样就能使轮廓有更好的收敛性

 

梯度向量流

采用模糊处理的效果实际上并不是很好,更好的方法是采用梯度向量流(gradient vector flow)。梯度向量流用一个新的矢量场来代替梯度场,从而替换外部能量的部分。

我们用如下方式定义这个新的矢量场v,当梯度值较大的时候,我们另这个矢量场与梯度场的值大致相同;当梯度值较小的时候我们让v的值尽量平滑的变化。这也就意味着在图像边缘处,v的值与梯度场的值相同,当我们逐渐远离边界的时候,v的值不像梯度场一样立马变小,而是有一个逐渐变小的过程。实际上这个新的场v也是扩大了边界的影响范围,使得轮廓能够在更远的地方捕捉到边缘

如果我们将这个场画出来可以得到如下结果。我们可以看出在这种情况下如果初始轮廓在边界外部,那么轮廓将会收缩;如果初始轮廓在边界内部,那么轮廓将会外扩,即朝着向v的模大的地方衍进

Snakes算法也有很多令人头疼的地方,例如追踪每一个点不是一件容易的事,例如snake无法包围多个物体等等

除此以外由于这种算法是基于边缘的,它还会使曲线与我们不需要的边缘重合,例如以下这个例子:曲线并不能很好地包围手掌,而是被背景木桌的条纹所吸引了

 

水平集

为了解决snakes算法不能包围多个物体与洞的问题,我们有水平集(level set)这个算法。与定义一条曲线不同的是,我们定义了一个三维的函数,二维平面上的曲线实际上是这个函数在z=0的横截面

我们用这种方法可以很好地表示包含多个物体或洞的曲线

举个例子,下面右图是我们需要的曲线,左边是这个曲线对应的函数

这种算法还有很多细节我们就不在这讨论了

我们在以上讨论的算法都是基于图像边缘的,当然我们还有基于图像区域的算法,这种算法的能量只与曲线本身的性质以及两个区域块内的像素有关,而与图像的边界无关

比如以下的例子,我们运用基于区域的算法可以让曲线很好地收敛到斑马周围,因为这种情况下曲线外部的颜色基本是绿色,曲线内部基本是黑白的。但如果我们采用基于边缘的算法来计算,那么这个曲线就会收敛到斑马身上的条纹上

 

 

 

 


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

相关文章

Deep Snake for Real-Time Instance Segmentation:基于Deep Snake的实例实时分割

本文针对自己所看的 Deep Snake 做一个总结和存档,也方便其他同学学习 —— 阿波,2020.4.23 论文原文:Deep Snake for Real-Time Instance Segmentation 代码地址: snake 本篇文章工作有以下贡献: •提出了一种基于…

KMeans算法流程

一、什么是簇? 我们知道聚类就是让机器把数据集中的样本按照特征的性质分组,直观上来看,簇是一组一组聚集在一起的数据,在 一个簇 中的数据就认为是 同一类 ,簇就是聚类的结果表现。实际上簇并没有明确的定义&#xf…

HZNUCTF MISC Snake题解——python程序逆向,hashcat爆破sha256

目录 一.Dump得到pyc文件 二.pyc反编译得到py源码 三.分析程序逻辑 四.hashcat爆破 题目附件链接:https://pan.baidu.com/s/1CcS8BPGx8fKnsJgRvEi0bA?pwdt2yj 提取码:t2yj 一.Dump得到pyc文件 使用命令:python pyinstxtractor.py snake.exe 二.p…

DeepSnake实现实例分割

文章目录 简介:环境配置Demo实现全文总结参考文献 简介: DeepSnake(Deep Snake for Real-Time Instance Segmentation)作为CVPR 2020 oral论文,在实例分割任务上取得了实时分割效果的同时,还保持着非常不错的性能,该论…

【主动轮廓模型(二)】《GVF Snake》算法原理与OpenCV实现

文章目录 1 问题引入1.1 传统Snake模型的缺陷1.2 亥姆霍兹定理(Helmholtz theorem) 2 GVF Snake2.1 边缘图(Edge Map)2.2 梯度矢量流(Gradient Vector Flow,GVF)2.3 数值求解方法 3 OpenCV实现 …

用于实时实例分割的Deep Snake算法

第一部分:创新及其优点 第二部分:算法原理 第三部分:实验过程 第四部分:程序逻辑 1 创新及其优点 Deep Snake算法建立在传统Snake算法的基础上,将snake算法做成了轮廓结构化特征学习的方法,使用了循环卷积…

KMeans 算法(一)

K-means算法简述 K-means算法,也称为K-平均或者K-均值,一般作为掌握聚类算法的第一个算法。这里的K为常数,需事先设定,通俗地说该算法是将没有标注的 M 个样本通过迭代的方式聚集成K个簇。在对样本进行聚集的过程往往是以样本之间…

选择性搜索算法(Selective Search )——SS算法

文章目录 一、前言二、object Detection VS object Recognition(Selective Search的提出)2.1object recognition与object detection的关系2.2滑动窗口方法的局限性2.3Selective search算法的提出 三、Selective Search算法3.1什么是Selective Search&…

主动轮廓模型——Snake分割算法(MATLAB)

学习图像分割算法,在网上找到的关于主动轮廓模型的实现代码,自己简化总结了一下,在这里和大家分享,欢迎提问 snake是一种能量最小的曲线,表示为v(s) (x(s), y(s)), s为归一化的曲线长度,s∈[0, 1]。 能量…

麻雀搜索算法(Sparrow Search Algorithm,SSA)

文章目录 1 算法思想2 算法步骤3 求解函数最值(Python实现)4 算法进阶直接改进SSA融合别的智能优化算法来改进SSASMA及其改进的应用 原论文: [1]薛建凯. 一种新型的群智能优化技术的研究与应用[D].东华大学,2020. 1 算法思想 借鉴生物行为&a…

CVPR2020分割算法Deep Snake的配置(Deep Snake for Real-Time Instance Segmentation)

这篇文章为分割提供了新思路,很有参考意义。 注:原代码的运行环境为Ubuntu,本文在Windows10系统下完成配置。 1、论文下载: Deep Snake for Real-Time Instance Segmentation [paper][code] 2、代码下载: https:/…

图像分割之(五)活动轮廓模型之Snake模型简介

图像分割之(五)活动轮廓模型之Snake模型简介 zouxy09qq.com http://blog.csdn.net/zouxy09 在“图像分割之(一)概述”中咱们简单了解了目前主流的图像分割方法。下面咱们主要学习下基于能量泛函的分割方法。这里学习下Snake模型…

麻雀搜索算法SSA(Sparrow Search algorithm)

文章目录 前言数学模型 前言 麻雀搜索算法是2020提出的一种新的优化算法,出自东华大学xue和shen的论文:A novel swarm intelligence optimization approach: sparrow search algorithm,本文的内容是基于该论文来写的。 数学模型 麻雀搜索算…

snake 模型

转自:https://blog.csdn.net/caoniyadeniniang/article/details/77803002 一、曲线演化理论 假设CC(p)是一条光滑封闭的曲线,P是任意的参数化变量,设K表示曲 率,T表示切线,N表示法线,则有如下关系存在&…

蛇优化算法(Snake Optimization,SO)(附Matlab代码,完整,免费)

蛇优化算法(Snake Optimization,SO)(附Matlab代码,完整,免费) 一、算法灵感二、算法介绍2.1 初始化2.2 划分种群2.3 定义温度和食物2.4 食物不足时(探索阶段)2.5 食物充足时(开发阶段)2.5.1 斗争…

snake模型求解

 snake 模型 一、曲线演化理论 假设CC(p)是一条光滑封闭的曲线,P是任意的参数化变量,设K表示曲 率,T表示切线,N表示法线,则有如下关系存在: 因为T和N是互相垂直的(如图所示)&am…

snake模型

1 能量泛函 在介绍snake模型的参考资料[1]中,提到能量泛函的概念,这里对此概念做一个总结。 参考资料[6]给出了泛函的定义: 简单的说, 泛函就是定义域是一个函数集,而值域是实数集或者实数集的一个子集。推广开来&…

Snake算法知识点记录

Snake算法 snake是一种主动轮廓模型,主动轮廓模型目前用到了2种:CV和snake。snake在逐步迭代优化过程的目标是能量函数最小化,snake的目标不像sobel、canny等找到整张图的轮廓。它只搜索你给出的初始轮廓附近,达到轮廓更精确的目…

snake模型简介

图像分割之(五)活动轮廓模型之Snake模型简介 zouxy09qq.com http://blog.csdn.net/zouxy09 在“图像分割之(一)概述”中咱们简单了解了目前主流的图像分割方法。下面咱们主要学习下基于能量泛函的分割方法。这里学习下Snake模型简…

蛇优化算法(Snake Optimizer)

生物学机理&#xff1a;来源于蛇的交配行为。如果温度较低&#xff0c;且食物可用&#xff0c;蛇的交配行为发生&#xff1b;否则蛇只会寻找食物&#xff08;食物量<0.25&#xff09;或吃现有的食物(T>0.6)。基于此&#xff0c;将考虑蛇优化算法的搜索过程分为两个阶段&a…