1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| function output=hyst_thresh(I,t1,t2) %on suppose t1>t2
I_blur=conv_gauss(I); %la variance est fixée dans le corps de conv_gauss
I_nms_1=nms(I,t1); %I_nms_1 ne contient que les maxima locaux supérieur à t1.
I_nms_2=nms(I,t2); %le seuillage est inclus dans nms
output=I_nms_1;
[H,W]=size(output);
%je rends noir les bords de l'image
output(:,1)=zeros([1 H])';
output(:,W)=zeros([1 H])';
output(1,:)=zeros([1 W]);
output(H,:)=zeros([1 W]);
%j'enregistre les pixels qui sont détectés comme appartenant aux bords par le plus grand seuil t1
[strong_pixels_i,strong_pixels_j]=find(I_nms_1);
while ~isempty(strong_pixels_i)
for k=1:length(strong_pixels_i)
i=strong_pixels_i(k);
j=strong_pixels_j(k);
%après viennent des if assez lourds qui disent en gros que si les deux pixels au voisinage de (i,j) et appartenant à la direction perpendiculaire
%au gradient en (i,j) ont un gradient de norme >=t2 alors on les met à 1. Ceci est fait en distinguant 4 cas selon si le gradient en (i,j)
%est approximé par une direction horizontale, verticale, ou diagonale afin que l'on puisse identifié les 2 pixels voisins sur la direction
%perpendiculaire au gradient en (i,j).
end
end
[strong_pixels_i strong_pixels_j]=find(output & ~I_nms_1); % pour explorer les pixels aux bords qui viennent d'être mis à jour dans la boucle, on
va explorer leurs voisins.
I_nms_1=output;
end |
Partager