Code covered by the BSD License

# Toolbox Fast Marching

### Gabriel Peyre (view profile)

24 Oct 2004 (Updated )

A toolbox for the computation of the Fast Marching algorithm in 2D and 3D.

compute_edge_energy.m
```function W = compute_edge_energy(M,s,epsi, center_point)

% compute_edge_energy - compute an energy for fast marching.
%
%   W = compute_edge_energy(M,s,epsi);
%
%   W is the speed function for the front propagation
%   (should be high in the area of strong gradient).
%   The formula is :
%
%   1/W(x) = 1/(1 + |grad(M*G_s)|) + epsi
%
%   where G_s is a gaussian smoothing of width s.
%
%   Copyright (c) 2005 Gabriel Peyr

if nargin<3
epsi = 0.05;
end
if nargin<2
s = 3;
end

M = rescale(M);
s = round(s);

if ndims(M)==2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2D
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% smooth a bit
%    h = ones(s)/s^2;
h = compute_gaussian_filter([15 15], s/(2*size(M,1)), size(M));
G = conv2(M,h, 'same');
W = 1./G;        % speed = 1/potential
% remove border artifacts
e = 1/(1+epsi);
W(1:s+2,:) = e;
W(:,1:s+2) = e;
W(end-s-1:end,:) = e;
W(:,end-s-1:end) = e;

if nargin>3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% scale the metric to avoid shrinkage near zeros
m = size(M);
[Y,X] = meshgrid(1:m(2), 1:m(1));
d = sqrt( (X-center_point(1)).^2 + (Y-center_point(2)).^2 );
d(center_point(1),center_point(2)) = 1e-9;
W = W.*d;
end
elseif ndims(M)==3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3D
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[a,b,c] = size(M);
% smooth a bit
G = smooth3(M,'box',s);
G = 1./(1+sqrt(gx.^2 + gy.^2 + gz.^2)) + epsi;
W = 1./G;        % speed = 1/potential

if nargin>3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% scale the metric to avoid shrinkage near zeros
m = size(M);
[X,Y,Z] = meshgrid(1:m(2), 1:m(1));
d = sqrt( (X-center_point(1)).^2 + (Y-center_point(2)).^2 + (Y-center_point(3)).^2 );
d(center_point(1),center_point(2),center_point(3)) = 1e-9;
W = W.*d;
end
else
error('Works only for 2D and 3D data.');
end```