SUSAN signifie Smallest Univalue Segment Assimilating Nucleus. SUSAN utilise un masque en forme de disque centré sur le pixel à analyser. Pour chaque pixel 'p' compris dans le masque, on effectue la comparaison avec le centre 'pn'(nucleus) grâce à la fonction :
où t est le rayon du disque. Puis nous calculons la somme des comparaisons du masque.
Nous utilisons ensuite la comparaison suivante :
'g' est appelé seuil géometrique. Si 'g' est assez grand SUSAN devient un detecteur de contours.
clear all;
close all;
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'mytitle',...
'C:\Work\myfile.jpg')
img = imread(filename);
img=mean(img,3);
[ligneorigine colonneorigine]=size(img);
%h = [0 0 1 1 1 0 0
% 0 1 1 1 1 1 0
% 1 1 1 1 1 1 1
% 1 1 1 1 1 1 1
% 1 1 1 1 1 1 1
% 0 1 1 1 1 1 0
% 0 0 1 1 1 0 0];
taille = 3;
h = double(fspecial('disk', taille)>0);
nb1 = sum(sum(h))
%effet de bord
img = wextend(2,'zpd',img,taille);
[ligne colonne]=size(img);
d=zeros(ligne,colonne);
somme=0;
g= 3*nb1/4;
radius = 2*taille;
for i = taille+1 : ligne-(taille+1)
for j = taille+1 : colonne -(taille+1)
for l = -taille : taille
for c = -taille : taille
if h(l+taille+1,c+taille+1)
inter = (img(i+l,j+c)-img(i,j));
somme = somme + exp(-((inter/radius)^6));
end
end
end
d(i,j)=somme;
somme=0;
end
i
end
img = img(taille:end-taille-1,taille:end-taille-1);
d = d(taille:end-taille-1,taille:end-taille-1);
[ligne colonne]=size(img);
r=zeros(ligne,colonne);
nmax=max(max(d))*3/4;
nmax=max(max(d))/2;
for i = 1 : ligne
for j = 1 : colonne
if d(i,j)== 0
r(i,j)=nmax;
elseif d(i,j)< nmax
r(i,j)=d(i,j);
else
r(i,j)=nmax;
end
end
end
r=abs(r-nmax);
h=h/sum(sum(h));
r=conv2(r,h,'same');
[zmax,imax,zmin,imin]= extrema2(r);
imshow(uint8(img))
hold on
nb=100;
if length(imax)>nb
nbcorner = nb;
else
nbcorner=length(imax);
end
for i = 1 : nbcorner %length(imax)
quotien= floor(imax(i)/ligne);
reste = imax(i) - quotien*ligne;
plot([quotien-2 quotien-2 quotien+2 quotien+2 quotien-2],...
[reste-2 reste+2 reste+2 reste-2 reste-2] ,'r','LineWidth',1)
end
L'algorithme de SUSAN appliqué en détéction de contours.
Copyright © 2010-2014, tous droits réservés, contact : operationpixel@free.fr