%%% Credit
% & (ISR-2/LANL)%
%% See also% Ressembles:
% <../derive/gstsmooth.html |GSTSMOOTH|>,% .
% Requires:% .
%% Function implementation
function u = anisorfilt(I,varargin)
%%% parsing parameters
error(nargchk(1, 23, nargin, 'struct'));
error(nargoutchk(1, 1, nargout, 'struct'));
% mandatory parameterif ~(isnumeric(I) || islogical(I))
error('anisorfilt:inputerror','a matrix is required in input'); end
% optional parameters
p = createParser('ANISORFILT'); % principal optional parameters
p.addOptional('method', 'dil', @(x)ischar(x) && any(strcmpi(x,{'dil','ero'})));p.addOptional('niter', 10, @(x)isscalar(x) && x>0);
p.addOptional('delta', 0.5, @(x)isscalar(x) && x>0);p.addOptional('nu', 4, @(x)isscalar(x) && x>=0);
p.addParamValue('rho', 3, @(x)isscalar(x) && isfloat(x) && x>=0);p.addParamValue('sig', 1, @(x)isscalar(x) && isfloat(x) && x>=0);
p.addParamValue('der', 'fast', @(x)islogical(x) || (ischar(x) && ... any(strcmpi(x,{'matlab','vista','fast','conv','diag', ...
'tap5','sob','opt','ana'}))));p.addParamValue('int', 'fast', @(x)islogical(x) || (ischar(x) && ...
any(strcmpi(x,{'matlab','conv','fast','ani'}))));p.addParamValue('samp', 2, @(x)isscalar(x) && round(x)==x && x>=1 && x<=5);
% parse and validate all input arguments
p.parse(varargin{:}); p = getvarParser(p);
%%
% checking/setting parameter
% the sign of delta defines if the morphological operation is a dilation ('+' % sign) or an erosion ('-' sign)
if strcmpi(p.method,'ero'), p.delta = -p.delta; end
%%% perform the anisotropic diffusion
u = anisorfilt_base(I, p.niter, p.delta, p.nu, p.rho, p.sig, ... p.der, p.int, p.samp);
if p.disp
figure, imagesc(rescale(u,0,1)), colormap gray, axis image off; title('continuous-scale anisotropic diffusion')
end
end % end of anisorfilt
##### SOURCE END #####-->