资源简介
实现变分水平集图像分割方法中的
“C-V”模型(Active contour without edge)
代码片段和文件信息
%%% 本程序采用半隐式方案实现变分水平集图像分割方法中的
%%% “C-V”模型(Active contour without edge)
clear all;
close all;
clc;
Img=imread(‘3-1.bmp‘);
Img=double(rgb2gray(Img));
% Img=imresize(Img[8080]);
figure(1); imshow(uint8(Img));
[nxny]=size(Img);
%%- 将初始曲线C设置为圆
ic=floor(nx/2); % 计算初始圆形曲线的圆心
jc=floor(ny/2);
r=ic/3; % 圆形曲线的半径
%%- 初始化u为距离函数
u = zeros([nxny]);
for i=1:nx
for j=1:ny
u(ij)= r-sqrt((i-ic).^2+(j-jc).^2);
end
end
%%- 将初始圆形曲线叠加在原始图片上
figure(2);
imshow(uint8(Img));
hold on;
[ch] = contour(u[0 0]‘r‘);
%%- 初始化参数
epsilon=1.0; % Heaviside函数参数设置
nu=250;
delta_t=0.1;
nn=0;
%%- 迭代计算开始
for n=1:1000
%%- 计算正则化的Heavside函数
H_u = 0.5*(1+(2/pi)*atan(u/epsilon));
%%- 由当前u计算参数c1和c2
c1=sum(sum(H_u.*Img))/sum(sum(H_u));
c2=sum(sum((1-H_u).*Img))/sum(sum(1-H_u));
%%- 由当前c1和c2更新u
delta_H = (1/p
评论
共有 条评论