基于偏微分方程的图像分割(二)Snake模型|基于偏微分方程的图像分割(二)Snake模型 Matlab实现

一、Snake模型[3]的数字原理 来自[1]
1987年Kass等人共同发表了题为“Snake:Active contour models”的论文,首次引进了变分法,提出了运用活动轮廓模型进行图像分割的思想.

基于偏微分方程的图像分割(二)Snake模型|基于偏微分方程的图像分割(二)Snake模型 Matlab实现
文章图片

基于偏微分方程的图像分割(二)Snake模型|基于偏微分方程的图像分割(二)Snake模型 Matlab实现
文章图片

基于偏微分方程的图像分割(二)Snake模型|基于偏微分方程的图像分割(二)Snake模型 Matlab实现
文章图片

基于偏微分方程的图像分割(二)Snake模型|基于偏微分方程的图像分割(二)Snake模型 Matlab实现
文章图片
二、原理解释 来自[2]
Snake模型首先需要在感兴趣区域的附近给出一条初始曲线,接下来最小化能量泛函,让曲线在图像中发生变形并不断逼近目标轮廓。
Kass等提出的原始Snakes模型由一组控制点:v(s)=[x(s), y(s)] s∈[0, 1] 组成,这些点首尾以直线相连构成轮廓线。其中x(s)和y(s)分别表示每个控制点在图像中的坐标位置。 s 是以傅立叶变换形式描述边界的自变量。在Snakes的控制点上定义能量函数(反映能量与轮廓之间的关系):

基于偏微分方程的图像分割(二)Snake模型|基于偏微分方程的图像分割(二)Snake模型 Matlab实现
文章图片
其中第1项称为弹性能量是v的一阶导数的模,第2项称为弯曲能量,是v的二阶导数的模,第3项是外部能量(外部力),在基本Snakes模型中一般只取控制点或连线所在位置的图像局部特征例如梯度:

基于偏微分方程的图像分割(二)Snake模型|基于偏微分方程的图像分割(二)Snake模型 Matlab实现
文章图片
也称图像力。(当轮廓C靠近目标图像边缘,那么C的灰度的梯度将会增大,那么上式的能量最小,由曲线演变公式知道该点的速度将变为0,也就是停止运动了。这样,C就停在图像的边缘位置了,也就完成了分割。那么这个的前提就是目标在图像中的边缘比较明显了,否则很容易就越过边缘了。)
弹性能量和弯曲能量合称内部能量(内部力),用于控制轮廓线的弹性形变,起到保持轮廓连续性和平滑性的作用。而第三项代表外部能量,也被称为图像能量,表示变形曲线与图像局部特征吻合的情况。内部能量仅仅跟snake的形状有关,而跟图像数据无关。而外部能量仅仅跟图像数据有关。在某一点的α和β的值决定曲线可以在这一点伸展和弯曲的程度。
最终对图像的分割转化为求解能量函数Etotal(v)极小化(最小化轮廓的能量)。在能量函数极小化过程中,弹性能量迅速把轮廓线压缩成一个光滑的圆,弯曲能量驱使轮廓线成为光滑曲线或直线,而图像力则使轮廓线向图像的高梯度位置靠拢。基本Snakes模型就是在这3个力的联合作用下工作的。
因为图像上的点都是离散的,所以我们用来优化能量函数的算法都必须在离散域里定义。所以求解能量函数Etotal(v)极小化是一个典型的变分问题(微分运算中,自变量一般是坐标等变量,因变量是函数;变分运算中,自变量是函数,因变量是函数的函数,即数学上所谓的泛函。对泛函求极值的问题,数学上称之为变分法)。
在离散化条件(数字图像)下,由欧拉方程可知最终问题的答案等价于求解一组差分方程:(欧拉方程是泛函极值条件的微分表达式,求解泛函的欧拉方程,即可得到使泛函取极值的驻函数,将变分问题转化为微分问题。)
记外部力 F = ?? P, Kass等将上式离散化后,对x(s)和y(s)分别构造两个五对角阵的线性方程组,通过迭代计算进行求解。在实际应用中一般先在物体周围手动点出控制点作为Snakes模型的起始位置,然后对能量函数迭代求解。
三、Matlab实现

% ========================================================================= %Snakes:Active Contour Models % ========================================================================= % By gujinjin 2012/12/10-12Sunny % 基于KASS等的论文思想 % 参考文献: % [1] KASS etc.Snakes:Active Contour Models % [2] CSDN 博客 - Author:乐不思蜀Tone % [3] Ritwik Kumar(Harvard University),D.Kroon(Twente University)的程序 % [4] 《数学建模与数学实验》 % ------ clc; clf; clear all; % ========================================================================= %获取手动取点坐标 % ========================================================================= % 读取显示图像 %I = imread('Coronary_MPR.jpg'); I =imread('t2.bmp'); % 转化为双精度型 %I = im2double(I); % 若为彩色,转化为灰度 if(size(I,3)==3), I=rgb2gray(I); end figure(1),imshow(I); %--------------------------- %高斯滤波 %--------------------------- sigma=1.0; % 创建特定形式的二维高斯滤波器H H = fspecial('gaussian',ceil(3*sigma), sigma); % 对图像进行高斯滤波,返回和I等大小矩阵 Igs = filter2(H,I,'same'); %--------------------------- %获取Snake的点坐标 %--------------------------- figure(2),imshow(Igs); x=[]; y=[]; c=1; N=100; %定义取点个数c,上限N % 获取User手动取点的坐标 % [x,y]=getpts while c

四、演示效果




reference 1、http://www.doc88.com/p-6741785598618.html
2、《Matlab图像处理》part1 Snakes:Active Contour Models 主动轮廓模型
【基于偏微分方程的图像分割(二)Snake模型|基于偏微分方程的图像分割(二)Snake模型 Matlab实现】3、M. Kass, A. Witkin, and D. Terzopoulos. Snakes Active contour models. Int.

    推荐阅读