function Res=HAUSSDORF(ImVT,ImSeg) % Critère d'evaluation de HAUSSDORF % ImSeg : matrice correspondant à l'image segmentée % ImVT : matrice correspondant à l'image de Reference (Vérité terrain) % % Utilitaires pour l'évaluation de la segmentation d'images % Toolbox matlab (version 5.3) % % (c) Laboratoire de Vision et Robotique (UPRES EA 2078) % ENSI de Bourges - Université d'Orléans % % Sébastien Chabrier : sebastien.chabrier@ensi-bourges.fr % % Si vous utilisez cette toolbox, veuillez citer ce papier svp. % %S. Chabrier, B. Emile, C. Rosenberger, H. Laurent, %"Unsupervised performance evaluation of image segmentation", %Special Issue on Performance Evaluation in Image Processing, %EURASIP Journal on Applied Signal Processing, pages 1-12, 2006. fond=0; contour=255; contourVT=255; Res=0; ImTmp=and(ImVT,ImSeg); HVT=IMHIST(ImVT,2); HSeg=IMHIST(ImSeg,2); Hand=IMHIST(ImTmp,2); Ni=HVT(2); Na=HSeg(2); Nand=Hand(2); N=max(Ni,Na); [M,L]=find(ImVT==contourVT); TailleVT=length(M); ContVT=zeros(TailleVT,2); [M,L]=find(ImSeg==contour); TailleSeg=length(M); ContSeg=zeros(TailleSeg,2); A=size(ImVT); cpt=1; cpt2=1; for x=1:A(1) for y=1:A(2) if (ImVT(x,y)==contourVT) ContVT(cpt,1)=x; ContVT(cpt,2)=y; cpt=cpt+1; end; if (ImSeg(x,y)==contour) ContSeg(cpt2,1)=x; ContSeg(cpt2,2)=y; cpt2=cpt2+1; end; end; end; ResMinSeg=zeros(Na,1); for i=1:Na % contour segmenté % %si ce n'est pas déjà un point contour de la VT % disp(i); if (ImVT(ContSeg(i,1),ContSeg(i,2))~=contourVT) Dist=ContVT-[ones(TailleVT,1)*(ContSeg(i,1)),ones(TailleVT,1)*(ContSeg(i,2))];% vecteurs distance Dist2=Dist(:,1).^2+Dist(:,2).^2; % calcul de la distance pour chaque point de la VT [a,b]=min(Dist2(:)); %recherche du point contour VT le plus proche ResMinSeg(i)=a(1); else ResMinSeg(i)=0; end; end; ResMaxSeg=max(ResMinSeg); ResMinVT=zeros(Na,1); for i=1:Ni %si ce n'est pas déjà un point contour de la VT % disp(i); if (ImSeg(ContVT(i,1),ContVT(i,2))~=contour) Dist=ContSeg-[ones(TailleSeg,1)*(ContVT(i,1)),ones(TailleSeg,1)*(ContVT(i,2))];% vecteurs distance Dist2=Dist(:,1).^2+Dist(:,2).^2; % calcul de la distance pour chaque point de la VT [a,b]=min(Dist2(:)); %recherche du point contour VT le plus proche ResMinVT(i)=a(1); else ResMinVT(i)=0; end; end; ResMaxVT=max(ResMinVT); Res=max(ResMaxVT,ResMaxSeg); disp(Res);