• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: Matlab
  • 标签: CV  水平集  

资源简介

包含cv水平集的matlab源程序,改进算法以及应用代码

资源截图

代码片段和文件信息

function finalsdf = lsCV(I initsdfdelta_tmunvlambda1lambda2epsilonnum)
% initsdf 初始化符号距离函数
% delta_t 为步长  mu/nv为周长/面积权重系数
% lambda1/lambda2为能量项权重系数
% epsilon 为dirac函数参数

% check to see if the image is a color image...
d=ndims(I);%d = length(size(in_image));
if d==3
    I=double(rgb2gray(I));
elseif d==2
    I=double(I);
end
%delta_t*狄力克函数
dirac_delta_t = delta_t *  ( 1 ./ pi ) .* ( epsilon ./ ( epsilon.^2 + initsdf.^2 ) );

% 计算轮廓线内外能量
if num>0
    H_phi = 0.5 .* ( 1 + ( 2 ./ pi ) .* atan( initsdf ./ epsilon ) );
    H_phi_minus = 1 - H_phi;
    c1 = sum( sum( I .* H_phi ) ) /  sum( sum( H_phi ) );
    c2 = sum( sum( I .* H_phi_minus ) ) / sum( sum( H_phi_minus ) );
else
    c1=220;
    c2=5;
%     c1=0;
%     c2=130;
end
inside = ( I - c1 ).^2;
outside = ( I - c2 ).^2;
energy_term = -nv - lambda1 .* inside + lambda2 .* outside;%能量项

% 中心差分
dx_central = ( circshift( initsdf [ 0 -1 ] ) - circshift( initsdf [ 0 1 ] ) ) / 2;
dy_central = ( circshift( initsdf [ -1 0 ] ) - circshift( initsdf [ 1 0 ] ) ) / 2;

% div(delt_phi/|delta_phi|)
abs_grad_phi = ( sqrt( dx_central.^2 + dy_central.^2 ) + 0.00001 );
x = dx_central ./ abs_grad_phi;
y = dy_central ./ abs_grad_phi;
grad_term = mu .* divergence( x y );%梯度能量

% tt=dx_central;
% [ab]=size(tt);
% c=1:a;d=1:b;
% [CD]=meshgrid(dc);
% figuremesh(CDtt);

% phi(n+1)
finalsdf = initsdf + dirac_delta_t .* ( grad_term + energy_term );
%   finalsdf = initsdf;%保存每次迭代结果


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1570  2013-09-01 21:20  lsCV.m
     文件        2452  2013-11-21 21:45  lsCVTest.m

评论

共有 条评论