Bonjour je veux programmer le squelletisation d'un image numérique avec la méthode d'amincissement en utilisant la methode de tout ou rien :
voila l'algorithme que j'ai utilisé:
répéter pour i = 0, 1, 2, ...
Xi+1 := AmM8(AmM7( ... (AmM2(AmM1(Xi)) ... ))
jusqu'à ce que Xi+1 = Xi
Sq(X) := Xi
mais ça ne fonctionne pas bien.
function[A]=Am1(image)
[rows,columns]=size(image);
rows1=rows+2;
columns1=columns+2;
R=ones(rows1,columns1);
R(2:rows1-1,2:columns1-1)=image;
R(1,:)=zeros(1,columns1);
figure();imshow(R);title('R1');
for i=2:rows1-1
for j=2:columns1-1
if((R(i+1,j)+R(i+1,j+1)+R(i+1,j-1))==0 )
A1(i-1,j-1)=0;
else A1(i-1,j-1)=1;
if(R(i-1,j)==1)
A2(i-1,j-1)=0;
else A2(i-1,j-1)=1;
if(A1(i-1,j-1)==A2(i-1,j-1))
A3(i-1,j-1)=A1(i-1,j-1);
else
A3(i-1,j-1)=1;
end
end
end
end
end
figure();imshow(A1);title('A1');
figure();imshow(A2);title('A2');
figure();imshow(A3);title('A3');
A=image-A3;
figure();imshow(A);title('Am1');
function[A]=Am1(image)
[rows,columns]=size(image);
rows1=rows+2;
columns1=columns+2;
R=ones(rows1,columns1);
R(2:rows1-1,2:columns1-1)=image;
R(1,:)=zeros(1,columns1);
figure();imshow(R);title('R1');
for i=2:rows1-1
for j=2:columns1-1
if((R(i+1,j)+R(i+1,j+1)+R(i+1,j-1))==0 )
A1(i-1,j-1)=0;
else A1(i-1,j-1)=1;
if(R(i-1,j)==1)
A2(i-1,j-1)=0;
else A2(i-1,j-1)=1;
if(A1(i-1,j-1)==A2(i-1,j-1))
A3(i-1,j-1)=A1(i-1,j-1);
else
A3(i-1,j-1)=1;
end
end
end
end
end
figure();imshow(A1);title('A1');
figure();imshow(A2);title('A2');
figure();imshow(A3);title('A3');
A=image-A3;
figure();imshow(A);title('Am1');
function[A]=Am2(image)
[rows,columns]=size(image);
rows1=rows+2;
columns1=columns+2;
R=ones(rows1,columns1);
R(2:rows1-1,2:columns1-1)=image;
R(rows1,:)=zeros(1,columns1);
for i=2:rows1-1
for j=2:columns1-1
if((R(i-1,j)+R(i-1,j+1)+R(i-1,j-1))==0 )
A1(i-1,j-1)=0;
else A1(i-1,j-1)=1;
end
if(R(i+1,j)==1)
A2(i-1,j-1)=0;
else A2(i-1,j-1)=1;
end
if(A1(i-1,j-1)==A2(i-1,j-1))
A3(i-1,j-1)=A1(i-1,j-1);
else
A3(i-1,j-1)=1;
end
end
end
A=image-A3;
figure();imshow(A);title('Am2');
========> ainsi de suite jusqu'a Am8
function[A8,S]=sqel5(image)
S=0;
A1=Am1(image);
A2=Am2(A1);
A3=Am3(A2);
A4=Am4(A3);
A5=Am5(A4);
A6=Am6(A5);
A7=Am7(A6);
A8=Am8(A7);
image1=sqel5(A8);
if(image1==image)
S=image;
end
end
Afficher la suite