【图像分割】基于主动轮廓模型实现图像分割附matlab代码

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 【图像分割】基于主动轮廓模型实现图像分割附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机

⛄ 内容介绍

主动轮廓模型算法是目前流行的图像分割算法, 其主要优点是无论图像的质量如何, 总可以抽取得到光滑、封闭的边界. 本文综述了主动轮廓模型算法的发展概况, 并分类介绍了各算法的特点. 此外, 本文还给出了算法发展的方向, 以及今后研究所面临的关键问题.

⛄ 部分代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% interate.m implements the core of the snakes (active contours) algorithm.

% It is called by the snk.m file which is the GUI frontend. If you do not

% want to deal with GUI, look at this file and the included comments which

% explain how active contours work.

%

% To run this code with GUI

%   1. Type guide on the matlab prompt.

%   2. Click on "Go to Existing GUI"

%   3. Select the snk.fig file in the same directory as this file

%   4. Click the green arrow at the top to launch the GUI

%

%   Once the GUI has been launched, you can use snakes by

%   1. Click on "New Image" and load an input image. Samples image are

%   provided.

%   2. Set the smoothing parameter "sigma" or leave it at its default value

%   and click "Filter". This will smooth the image.

%   3. As soon as you click "Filter", cross hairs would appear and using

%   them and left click of you mouse you can pick initial contour location

%   on the image. A red circle would appead everywhere you click and in

%   most cases you should click all the way around the object you want to

%   segement. The last point must be picked using a right-click in order to

%   stop matlab for asking for more points.

%   4. Set the various snake parameters (relative weights of energy terms

%   in the snake objective function) or leave them with their default value

%   and click "Iterate" button. The snake would appear and move as it

%   converges to its low energy state.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


function [smth] = interate(image, xs, ys, alpha, beta, gamma, kappa, wl, we, wt, iterations);

% image: This is the image data

% xs, ys: The initial snake coordinates

% alpha: Controls tension

% beta: Controls rigidity

% gamma: Step size

% kappa: Controls enegry term

% wl, we, wt: Weights for line, edge and terminal enegy components

% iterations: No. of iteration for which snake is to be moved



%parameters

N = iterations;

smth = image;


% Calculating size of image

[row col] = size(image);



%Computing external forces


eline = smth; %eline is simply the image intensities


[grady,gradx] = gradient(smth);

eedge = -1 * sqrt ((gradx .* gradx + grady .* grady)); %eedge is measured by gradient in the image


%masks for taking various derivatives

m1 = [-1 1];

m2 = [-1;1];

m3 = [1 -2 1];

m4 = [1;-2;1];

m5 = [1 -1;-1 1];


cx = conv2(smth,m1,'same');

cy = conv2(smth,m2,'same');

cxx = conv2(smth,m3,'same');

cyy = conv2(smth,m4,'same');

cxy = conv2(smth,m5,'same');


for i = 1:row

   for j= 1:col

       % eterm as deined in Kass et al Snakes paper

       eterm(i,j) = (cyy(i,j)*cx(i,j)*cx(i,j) -2 *cxy(i,j)*cx(i,j)*cy(i,j) + cxx(i,j)*cy(i,j)*cy(i,j))/((1+cx(i,j)*cx(i,j) + cy(i,j)*cy(i,j))^1.5);

   end

end


% imview(eterm);

% imview(abs(eedge));

eext = (wl*eline + we*eedge -wt * eterm); %eext as a weighted sum of eline, eedge and eterm


[fx, fy] = gradient(eext); %computing the gradient



%initializing the snake

xs=xs';

ys=ys';

[m n] = size(xs);

[mm nn] = size(fx);

   

%populating the penta diagonal matrix

A = zeros(m,m);

b = [(2*alpha + 6 *beta) -(alpha + 4*beta) beta];

brow = zeros(1,m);

brow(1,1:3) = brow(1,1:3) + b;

brow(1,m-1:m) = brow(1,m-1:m) + [beta -(alpha + 4*beta)]; % populating a template row

for i=1:m

   A(i,:) = brow;

   brow = circshift(brow',1)'; % Template row being rotated to egenrate different rows in pentadiagonal matrix

end


[L U] = lu(A + gamma .* eye(m,m));

Ainv = inv(U) * inv(L); % Computing Ainv using LU factorization

 

%moving the snake in each iteration

for i=1:N;

   

   ssx = gamma*xs - kappa*interp2(fx,xs,ys);

   ssy = gamma*ys - kappa*interp2(fy,xs,ys);

   

   %calculating the new position of snake

   xs = Ainv * ssx;

   ys = Ainv * ssy;

   

   

   %Displaying the snake in its new position

   imshow(image,[]);

   hold on;

   

   plot([xs; xs(1)], [ys; ys(1)], 'r-');

   hold off;

   pause(0.001)    

end;


⛄ 运行结果

⛄ 参考文献

[1]吴北海. 基于主动轮廓模型的医学图像分割[D]. 河北工业大学.

[2]高梅, and 余轮. "基于主动轮廓模型的图像分割算法." 漳州师范学院学报(自然科学版) (2007).

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除


相关文章
|
9月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
763 0
|
9月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
1078 0
|
9月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
282 0
|
9月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
281 0
|
9月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
392 8
|
9月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
381 8
|
9月前
|
机器学习/深度学习 数据采集 测试技术
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
330 8
|
9月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
448 8
|
9月前
|
机器学习/深度学习 供应链 算法
【电动车】基于削峰填谷的电动汽车多目标优化调度策略研究(Matlab代码实现)
【电动车】基于削峰填谷的电动汽车多目标优化调度策略研究(Matlab代码实现)
311 0
|
9月前
|
传感器 机器学习/深度学习 算法
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)
433 0

热门文章

最新文章