Bonjour,
J'ai fait un programme qui crée un nuage de points, ensuite trace la triangulation de Delaunay a ce nuage de points, dessine l'enveloppe convexe et fait le graphe de Gabriel à tous les cotés des triangles. Voila ca programme :
function ReconnaissanceFormebbbb %creation nuage de points xmin=0;xmax=10;ymin=0;ymax=10; axis([xmin xmax ymin ymax]) hold on grid off x=[];y=[]; n=0;but=1; while but==1 [xi,yi,but]=ginput(1); if(xi>=xmin && xi<=xmax && yi>=ymin && yi<=ymax) if but==1 plot(xi,yi,'.r'); n=n+1; x(:,n)=xi;y(:,n)=yi; end; else but=0; end; end; x=x';y=y'; ListPoint=[(1:n) 1]; %Triangulation de Delaunay triplot(delaunay(x,y),x,y) pause; %enveloppe convexe plot(x,y,'.k'); hold on; ListPoint = convhull(x,y); n=size(ListPoint,2); for i=1:n j=ListPoint(i); end; plot(x(ListPoint),y(ListPoint),'green',x,y,'.r');hold on; pause; clc; %Construction de la liste des cotés d'une triangulation NbTr=size(delaunay(x,y),1); MCT=[]; Triangle=delaunay(x,y); for l=1:NbTr Tr=Triangle(l,:); i=Tr(1,1);j=Tr(1,2);k=Tr(1,3); MCT=[MCT;[i,j];[j,k];[k,i] ]; end; pause; hold on; RF=[]; n=size(MCT,1); for k=1:n Cote=MCT(k,:);i=Cote(1);j=Cote(2); n=numel(x); A=[x(i) y(i)]; B=[x(j) y(j)]; M=1/2*(A+B); R=(1/2)*norm(B-A); Go=1;k=0;Bool=0; while Go k=k+1; if ismember(k,[i j]); else C=[x(k) y(k)]; d=norm(C-M); Bool=d<R; end; Go=not(Bool) & (k<n); end; if not(Bool) RF=[RF;Cote]; end; end; end; plot(x,y,'.r'); n=size(Cote,1); for k=1:n i=Cote(k,1);j=Cote(k,2); plot([x(i) x(j)],[y(i) y(j)],'-b');hold on; end;
J'ai créé un nouveau programme qui trouve les cotés de l'enveloppe convexe.
function cote=TestSegConv(x,y,ListPoint) cote=0;i=1; while(cote==0 && i<numel(ListPoint)) if(ListPoint(i)==x) if(ListPoint(i+1)==y) cote=1; else cote=0; end; else if (ListPoint(i)==y) if(ListPoint(i+1)==x) cote=1; else cote=0; end; end; end; i=i+1; end;
J'ai essayer de l'insérer dans le premier programme pour que au lieu de faire le graphe de Gabriel sur tous les triangles, juste le faire sur toute l'enveloppe convexe et si on enleve 1 segment faire Gabriel sur la nouvelle enveloppe convexe, en fait faire de la reconnaissance de forme.
Merci d'avance pour votre aide