from
GeoML
by Gabriele Lombardi A general morphable template tool for image segmentation.
ATE_GradientNorm(varargin)
function varargout = ATE_GradientNorm(varargin)
% ATE_GRADIENTNORM Computes the energy using the norm of gradient.
%
% This function computes the gradient and uses the sum of the gadient norm
% as energy.
%
% INITIALIZATION:
%
% Params
% ------
% IN:
% img = The image.
% fedge = The edge function.
% OUT:
% ngrad = The norms of the gradients.
% At least one argument is required:
if nargin<1
error('At least one argument is required!');
end
% Check the type of call:
if numel(varargin{1})==1 && varargin{1}==0
% Call the init function:
varargout{:} = InitEnvironment(varargin{2:end});
else
% Call the evaluate function:
varargout{:} = ComputeEnergy(varargin{:});
end
% ------------------------ LOCAL FUNCTIONS ------------------------
% The init function:
function ngrad = InitEnvironment(img)
% Check params:
if nargin<1
error('An image is requred for the initialization!');
end
% Get a gray double image:
img = imtype(img,'gF');
% Computing the gradient:
[gradx,grady] = gradient(img);
% Computing the norm of the gradient:
ngrad = gradx.^2 + grady.^2;
% Computing the final energy map:
ngrad = -imscale(ngrad);
% -----------------------------------------------------------------
% The evaluation function:
function E = ComputeEnergy(pts,ngrad)
% The energy is the sum of the gradient's norm:
E = sum(impixels(ngrad,pts))/size(pts,2);