Code covered by the BSD License  

Highlights from
Edge detection by nonlinear derivatives

image thumbnail
from Edge detection by nonlinear derivatives by Olivier LALIGANT
This short demo presents an efficient algorithm for edge detection.

edgeNL()
% edgeNL: Edge detection function based on nonlinear derivatives 
%   (elementary demo):
%   This function differientiates the image to estimate the gradient. 
%   The principle is based on polarized derivatives to automatically select
%   the best edge localization.
%   The main benefits are
%     - univocal edge localization for synthetic and real images
%     - noise reduction with no regularization: the noise level is weaker than
%       the noise level in the original image
%     - better direction estimation of the gradient
%     - can product a confident edge reference map for synthetic images
%     - extremely efficient on salt noise OR pepper noise (this last case needs 
%       a change in the nonlinear derivatives)
%     - still noise reduction with regularized schemes (Canny, Demigny, ..., 
%       can also be adapted to the asymetrical filters (Prewitt, Sobel, ...)
%   Drawback
%     - no detection of vertical and horizontal "white" thin (1 pixel) lines
%   Rk: this demo only performs edge detection and does not include edge 
%       extraction (local maxima) and other steps to obtain a binary
%       edge map.
%   Written by O. Laligant - 2009, University of Burgundy
%   Ref: A Nonlinear Derivative Scheme Applied to Edge Detection, 
%       Olivier Laligant, Frederic Truchetet, IEEE Transactions on Pattern 
%       Analysis and Machine Intelligence - PAMI , vol. 32, no. 2, 
%       pp. 242-257, 2010
function edgeNL()

%  ------------- Edge detection on a simple synthetic image  ------------- 
Im = example();
figure(1), imagesc(Im);
title ('Original image');


% edge detection (nonlinear gradient estimate)
% better localization and direction estimation than the linear scheme
gI = algoNL(Im);

% For a synthetic object, the edges are localized inside the object shape
figure(2), imagesc(gI);
title('Edge detection');


% ------------- Additive gaussian white noise ------------------------

Imn = imnoise(Im, 'gaussian', 0, 0.01);
figure(3), imagesc(Imn);
title ('Noisy image');

gIn = algoNL(Imn);

figure(4), imagesc(gIn);
title('Edge detection on the noisy image');

end
% ----------------------------------------------------------------------------




%
%  --------------------------- functions  -------------------------------------
%


% ------------- computation of the nonlinear derivatives  ------------- 
% polarized derivatives
% lead to an univocal localization of edges
function [gm, gh, gv] = algoNL(I);
% for classical regularization schemes, I can be replaced by a regularized
%   version
% for asymetrical schemes (Prewitt, Sobel, etc), I must be replaced by two
%   regularized versions (the regularization is different on columns and rows)
dph = thresh0(conv2(I, [0 1 -1], 'same'));
dnh = -thresh0(-conv2(I, [1 -1 0], 'same'));
gh = dph+dnh;
dpv = thresh0(conv2(I, [0; 1; -1], 'same'));
dnv = -thresh0(-conv2(I, [1;  -1; 0], 'same'));
gv = dpv + dnv;
gm = sqrt(gh.*gh + gv.*gv);

end

% ------------- threshold -------------
function st = thresh0(s)
	st = s.*(sign(s)+1)/2;
end%function

% ------------- test image -------------
% an example of image to illustrate the localization of the method
function Im = example()
Im =[
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0   255   255   255     0     0     0     0     0     0     0   255     0     0
     0     0   255   255   255     0     0     0     0     0     0   255   255     0     0
     0     0   255   255   255     0     0     0     0     0   255   255   255     0     0
     0     0     0     0     0     0     0     0     0   255   255   255   255     0     0
     0     0     0     0     0     0     0     0   255   255   255   255   255     0     0
     0     0     0     0     0     0     0   255   255   255   255     0     0     0     0
     0     0     0     0     0     0   255   255   255   255     0     0     0     0     0
     0     0     0     0     0   255   255   255   255   255     0     0     0     0     0
     0     0     0     0   255   255   255     0   255   255     0     0     0     0     0
     0     0     0   255   255   255     0     0     0   255   255     0     0     0     0
     0     0   255   255   255   255   255     0   255   255   255   255   255     0     0
     0     0     0   255   255   255   255   255   255   255   255   255     0     0     0
     0     0     0     0   255   255   255   255   255   255   255   255   255     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
];
end

Contact us