Remerciements table des Matières Introduction 1



Yüklə 0,54 Mb.
səhifə11/13
tarix12.01.2019
ölçüsü0,54 Mb.
#95752
1   ...   5   6   7   8   9   10   11   12   13

ANNEXES




Annexe 1 : Caractéristiques des machines à usinage rapide Urane 20 et Urane 25

URANE est un centre d'usinage à grande vitesse intégrable en transfert.

C'est l'une des machines les plus performantes du marché de l'usinage à grande vitesse. Elle est équipée de moteurs linéaires permettant ainsi d'augmenter sa dynamique et sa capacité à répéter les opérations.



Annexe 2 : Validation du Filtre de Harris pour la Détection des Points de Fortes Courbures

Procédure :



A partir de quelques images de synthèse, dont on connaît les positions exactes des coins, on exécute le filtre de Harris pour obtenir les résultats suivants :
C
Points de fortes courbures
as des Rectangles


image de synthèse

Coordonnées Coordonnées

réelles  après calcul


40 35 39 35

40 76 39 76

125 35 124 35

125 76 124 76







42 139


43 99

120 99


121 139

Histogramme du filtre de Harris


Cas d'une Triple Jonction
C
image de synthèse
oordonnées réelles
112 190
après calcul
110 191

111 189



Points de fortes courbures


Histogramme du filtre de Harris






Cas d'un Cercle


image de synthèse




Points de fortes courbures







Histogramme du filtre de Harris




Annexe 3 : Listing du programme Matlab de la détection de PFCs par la méthode de Beaudet

%%%%%%%%%%%%%%%%%%% Calcul des Points de fortes courbures %%%%%%%%%%%%%

%%%%%%% par la méthode de Beaudet développée par Deriche %%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


clear all

close all


s = input('Fichier image initiale:','s');

ima = imread (s);

imshow (ima);

title('Image Source');

ima1=double(ima);

[tail1,tail2]=size(ima);

%%%% élargissement de l'image initiale %%%%%%

ima2(1:tail1+4,1:tail2+4)=0 ;

ima2(3:tail1+2,3:tail2+2)=ima1;

ima1(1:tail1+4,1:tail2+4)=ima2(1:tail1+4,1:tail2+4);

clear ima2
%%%%%%%%%%%%%%%%%% Calcul de DET1 %%%%%%%%%%%%%%%%%%%%%%%%%%%

alpha = input('Entrez la valeur max alpha pour le calcul de DET1 :');

yd1(1:tail1+4,1:tail2+4)=0;

%%%% Calcul des dérivées secondes

[yxx,yyy,yyx] = ded (ima1, tail1, tail2, alpha);

%%%% yd1 = image det 1

yd1 = (yxx.*yyy)-(yyx.*yyx);

figure;


imshow(yd1);

title('yd1');

%%%%%%%%%% Seuillage de DET1 %%%%%%%%%%%%%%%%%

seuil = input('Entrez la valeur du seuil pour DET1 :');

figure;

imshow(yd1);



title('yd1');

ze1(1:tail1+4,1:tail2+4)=0;

for n = 3:tail2+2

for m = 3:tail1+2

if ((yd1(m,n)>seuil ) & ((sign(yd1(m,n-1))~=sign(yd1(m,n))) ...

| (sign(yd1(m-1,n))~=sign(yd1(m,n)))))

ze1(m,n) = yd1(m,n);

end


if ((yd1(m,n)>seuil ) & ((sign(yd1(m+1,n))~=sign(yd1(m,n))) ...

| (sign(yd1(m,n+1))~=sign(yd1(m,n)))))

ze1(m,n) = yd1(m,n);

end


end

end


figure;

imshow(ze1);

title ('image DET avec alpha max ');

%%%%%%%%%%%%%%%%%%%%% Max Locaux de DET1 %%%%%%%%%%%%%%%

z1 = max1(ze1,tail1,tail2);

figure;


imshow(z1);

title ('Image DET1 avec alpha max et Seuillage ');

%%%%%%%%%%%%%%%%%%%%% Calcul de DET2 %%%%%%%%%%%%%%%%%%%

clear alpha;

clear seuil

alpha = input('Entrez la valeur min alpha pour calcul de DET2 :');

%%%% calcul des dérivées secondes

[yxx,yyy,yyx] = ded (ima1, tail1, tail2, alpha);

%%%% yd2 = image det 2

yd2(1:tail1+4,1:tail2+4)=0;

yd2 = (yxx.*yyy)-(yyx.*yyx);

figure;


imshow(yd2);

title('yd2');

%%%%%%%%%% Seuillage de DET2 %%%%%%%%%%%%%%%%%

seuil = input('Entrez la valeur du seuil pour DET2 :');

ze2(1:tail1+4,1:tail2+4)=0;

for n = 3:tail2+2

for m = 3:tail1+2

if ((yd2(m,n)>seuil)&((sign(yd2(m,n-1))~=sign(yd2(m,n))) ...

|(sign(yd2(m-1,n)) ~= sign(yd2(m,n)))))

ze2(m,n)= yd2(m,n) ;

end

if ((yd2(m,n)>seuil)&((sign(yd2(m+1,n))~=sign(yd2(m,n))) ...



|(sign(yd2(m,n+1)) ~= sign(yd2(m,n)))))

ze2(m,n)= yd2(m,n) ;

end

end


end

figure;


imshow(ze2);

title ('image DET avec alpha min ');

%%%%%%%%%%%%%%%%%%%%% Max Locaux de DET2 %%%%%%%%%%%%%%%

z2 = max1(ze2,tail1,tail2);

figure;

imshow(z2);



title ('Image DET2 avec alpha min et seuillage ');

%%%%% Appariemment des points entre DET1 et DET2 %%%%%%%

clear aplha %

[tab1,tab2,cpt] = appariemment(z1,z2,tail1,tail2); %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% Calcul du Laplacien de l'image source %%%%%%%%%%%%

[ze,yl] = laplacien (ima1,tail1,tail2); %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% Calcul des passages par zéros des droites (AB) %%%

meth=input('\n1:Passage par zéro de X1 vers X2 - 2:Passage par zéro de X2 vers X1:');

if meth==1 %

c = droite (tab1, tab2, ze, tail1, tail2, cpt); %

else %

c = modifdroite (tab1, tab2, ze, tail1, tail2, cpt);%



end %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%% Elimination des points nuls %%%%%%%%%%%%%%%%%%%%%%

%%%%% ->passages par zéro inéxistants %%%%%%%%%%%%%%%%%%

[L,C]=size(c); %

d(1:L,1:C)=0; %

g=1; %

for i= 1:L %



if (c(i,1)~=0 & c(i,2)~=0) %

d(g,1) = c(i,1); %

d(g,2) = c(i,2); %

g=g+1; %


end %

end %


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% Création de l'image couleur pour afficher %%%%%%%%

%%%%% les PFCs en couleur sur l'image en NDG %%%%%%%%

for x=1:tail1 %

for y=1:tail2 %

a(x,y,1)=ima(x,y); %

a(x,y,2)=ima(x,y); %

a(x,y,3)=ima(x,y); %

end %


end %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%% Remise à l'echelle des valeurs des pixels %%%%%%%%

[L1,C1] = size(d); %

for i=1:L1 %

if (d(i,1)~=0 & d(i,2)~=0) %

d(i,1) = d(i,1)-2; %

d(i,2) = d(i,2)-2; %

end %

end %


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% Application des PFCs sur l'image initiale %%%%%%%%

if (d(i,1)>0 & d(i,2)>0) %

for i = 1:L %

a(d(i,1),d(i,2),1) = 0 ; %

a(d(i,1),d(i,2),2) = 255 ; %

a(d(i,1),d(i,2),3) = 0 ; %

figure; %

imshow(a); %

title('finale'); %

end %


else %

' Aucun points caractéristiques éxistent' %

end %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%% Fonction utilisée pour le calcul des dérivées %%%%

%%%% premières et secondes suivant les axes x et y %%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [yxx,yyy,yyx] = ded (ima1, tail1, tail2, alpha)
yx = derivx(ima1,tail1,tail2, alpha);

yy = derivy(ima1,tail1,tail2, alpha);

yxx = derivx(yx,tail1,tail2,alpha);

yyy = derivy (yy, tail1, tail2, alpha);

yyx = derivx (yy, tail1, tail2, alpha);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%% fonction calculant la dérivée directionnelle %%%%

%%%% suivant x par la méthode récursive de Deriche %%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function yx = derivx(ima1,tail1,tail2, alpha)


% initialisation des paramètres de la dérivée suivant x

% initialisation des matrices nécessaires aux calculs

y1(1:tail1+4,1:tail2+4)=0;

y2(1:tail1+4,1:tail2+4)=0;

r(1:tail1+4,1:tail2+4)=0;

y11(1:tail1+4,1:tail2+4)=0;

y22(1:tail1+4,1:tail2+4)=0;

yx(1:tail1+4,1:tail2+4)=0;%yx = dérivée suivant l'axe des x


k=((1-(exp(-alpha)))^2) / (1+(2*alpha*exp(-alpha))-exp(-2*alpha));

b1 = 2*exp(-alpha);

b2 = -exp(-2*alpha);
%%% Calcul des paramètres du filtre récursif %%%%

a1 = 0; %

a2 = 1; %

a3 = -1; %

a4 = 0; %

a5 = k; %

a6 = k*exp(-alpha)*(alpha-1); %

a7 = k*exp(-alpha)*(alpha+1); %

a8 = -k*exp(-2*alpha); %

c1 = -(1-exp(-alpha))^2; %

c2 = 1; %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%% Calcul de la dérivée suivant x %%%%%%%%%%%%

%%%%%%%%traitement des pixels

for n = 3:tail2+2

for m = 3:tail1+2

y1(m,n)=a1*ima1(m,n)+a2*ima1(m,n-1)+b1*y1(m,n-1)+b2*y1(m,n-2);

end


end

for n = 3:tail2+2

for m = 3:tail1+2

l=tail2-n+5;

y2(m,l)=a3*ima1(m,l+1)+a4*ima1(m,l+2)+b1*y2(m,l+1)+b2*y2(m,l+2);

end


end

r=c1*(y1+y2);

%%%%%%%%%%%%%%%%%%%

for m =3:tail1+2

for n = 3:tail2+2

y11(m,n)=a5*r(m,n)+a6*r(m-1,n)+b1*y11(m-1,n)+b2*y11(m-2,n);

end

end


for m = 3:tail1+2

for n = 3:tail2+2

l=tail1-m+5 ;

y22(l,n)=a7*r(l+1,n)+a8*r(l+2,n)+b1*y22(l+1,n)+b2*y22(l+2,n);

end

end


%%%%%%%%%%%%%%%%%%%%%%%%%% yx = dérivée suivant x %%%%%%%%%%%%%%%%%%

yx = c2*(y11+y22); %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%% Calcul de droite et points adjacents par la méthode de Bresenham %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function c = droite (tab1, tab2, ze, tail1, tail2, cpt)
%%%%%%% initialisation des variables

aze=ze;


I1=0; % extrémité 1 en x

J1=0; % extrémité 1 en y

I2=0; % extrémité 2 en x

J2=0; % extrémité 2 en y

c(1:cpt-1,1:2)=0;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


for i=1:cpt-1

I1 = tab1(i,1);

J1 = tab1(i,2);

I2 = tab2(i,1);

J2 = tab2(i,2);

i1=I1;


j1=J1;

i2=I2;


j2=J2;
%%%%%%%%%%%%%% Calul de la plus grande longueur %%%%%%%%%%%%%%%%%%%

deltai = abs(i1-i2);

deltaj = abs(j1-j2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Cas particuliers %%%%%%%%%%%%%%%%%%%%%%

if ((deltai==0) & (deltaj ==0))

'Erreur, les 2 points sont IDENTIQUES'

end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% droites verticales %%%%%%%%%%%%%%%%%%%%

if ((deltaj==0) & (deltai~=0))

if (sign(i1-i2)>0)

while ((aze(i1,j1) ~= 256) & (i1 > i2))

i1=i1-1;

end


else

while ((aze(i1,j1) ~= 256) & (i1 < i2))

i1=i1+1;

end


end

if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else


'le point de passage par 0 existe pas '

end


i1=I1;

j1=J1;


i2=I2;

j2=J2;


end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%% droites horizontales %%%%%%%%%%%%%%%%%%%%%%%

if ((deltai==0) & (deltaj~=0))

if (sign(j1-j2)>0)

while (aze(i1,j1) ~= 256) & (j1 > j2)

j1=j1-1;


end

else


while ((aze(i1,j1) ~= 256) & (j1 < j2))

j1=j1+1;


end

end


if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else

'le point de passage par 0 existe pas '



end

end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% droites diagonales %%%%%%%%%%%%%%%%%%%%%%%%

if ((deltai == deltaj) & (deltai~=0) & (sign(i1-i2)>0) & (sign(j1-j2)>0))

while ((aze(i1,j1) ~=256) & (i1>i2) & (j1>j2))

i1=i1-1;

j1=j1-1;


end

if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else


'le point de passage par 0 existe pas '

end


i1=I1;

j1=J1;


i2=I2;

j2=J2;


else

if ((deltai==deltaj)&(deltai~=0) & (sign(i1-i2)>0)&(sign(j1-j2)<0))

while ((aze(i1,j1) ~=256) & (i1>i2) & (j1

i1=i1-1;


j1=j1+1;

end


if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else

'le point de passage par 0 existe pas '



end

i1=I1;


j1=J1;

i2=I2;


j2=J2;

else


if((deltai==deltaj)&(deltai~=0) & (sign(i1-i2)<0)&(sign(j1-j2)<0))

while ((aze(i1,j1) ~=256) & (i1

i1=i1+1;

j1=j1+1;


end

if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else


'le point de passage par 0 existe pas '

end


i1=I1;

j1=J1;


i2=I2;

j2=J2;


else

if((deltai==deltaj)&(deltai~=0)&(sign(i1-i2)<0)&(sign(j1-2)>0))

while ((aze(i1,j1) ~=256) & (i1j2))

i1=i1+1;


j1=j1-1;

end


if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else

'le point de passage par 0 existe pas '



end

end


end

end


end
%%%%%%%%%%%%%%%%%%%%%%%%%% Droites quelconques %%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%% Cas où DeltaJ>DeltaI %%%%%%%%

if((deltaj>deltai)&(deltai~=0)&(deltaj~=0))&((sign(i1-i2)>0)&(sign(j1-2)>0))

a = (i1-i2)/(j1-j2);

b = i1-(a*j1);

j1 = j1 - 1;

while ((aze(i1,j1) ~=256) & (i1>i2) & (j1>j2))

I = a*j1 + b

if (abs(i1-I) < abs((i1-1)-I))

j1 = j1 - 1;

else

j1 = j1 - 1;



i1 = i1 - 1;

end


end

if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else


'le point de passage par 0 existe pas '

end


i1=I1;

j1=J1;


i2=I2;

j2=J2;


else

if((deltaj>deltai)&(deltai~=0)&(deltaj~=0))&((sign(i1-i2)>0)&(sign(j1-2)<0))

a = (i1-i2)/(j1-j2);

b = i1-(a*j1);

j1 = j1 + 1;

while ((aze(i1,j1) ~=256) & (i1>i2) & (j1

I = a*j1 + b;

if (abs(i1-I) < abs((i1-1)-I))

j1 = j1 + 1;

else


j1 = j1 + 1;

i1 = i1 - 1;

end

end


if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else

'le point de passage par 0 existe pas '



end

i1=I1;


j1=J1;

i2=I2;


j2=J2;
else

if((deltaj>deltai)&(deltai~=0)&(deltaj~=0)) …

&((sign(i1-i2)<0)&(sign(j1-j2)<0))

a = (i1-i2)/(j1-j2);

b = i1-(a*j1);

j1 = j1 + 1;

while ((aze(i1,j1) ~=256) & (i1

I = a*j1 + b;

if (abs(i1-I) < abs((i1+1)-I))

j1 = j1 + 1;

else

j1 = j1 + 1;



i1 = i1 + 1;

end


end

if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else


'le point de passage par 0 existe pas '

end


i1=I1;

j1=J1;


i2=I2;

j2=J2;


else

if((deltaj>deltai)&(deltai~=0)&(deltaj~=0))&((sign(i1-i2)<0)

& (sign(j1-j2)>0))

a = (i1-i2)/(j1-j2);

b = i1-(a*j1);

j1 = j1 - 1;

while ((aze(i1,j1) ~=256) & (i1j2))

I = a*j1 + b;

if (abs(i1-I) < abs((i1+1)-I))

j1 = j1 - 1;

else

j1 = j1 - 1;



i1 = i1 + 1;

end


end

if (aze(i1,j1) == 256)

c(cpt,1) = i1;

c(cpt,2) = j1;

aze(i1,j1)

else


'le point de passage par 0 existe pas '

end


i1=I1;

j1=J1;


i2=I2;

j2=J2;


end

end


end

end


%%%%%%% Cas où DeltaJ>DeltaI %%%%%%%%

……………..
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%% Fonction appariant les points de DET1 et DET2 %%%%%%%

%%%%% en utilisant une spirale 7x7 %%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [tab1,tab2,cpt] = appariemment(z1,z2,tail1,tail2)


%%%% agrandissement des images DET1 et DET2 de 6 pixels

%%%% ds ttes les directions

ima21(1:tail1+6,1:tail2+6)=0 ;

ima21(2:tail1+5,2:tail2+5)=z1;

z11(1:tail1+6,1:tail2+6)=ima21(1:tail1+6,1:tail2+6);

ima22(1:tail1+6,1:tail2+6)=0 ;

ima22(2:tail1+5,2:tail2+5)=z2;

z22(1:tail1+6,1:tail2+6)=ima22(1:tail1+6,1:tail2+6);


%%%% définition de la spirale 7x7 %%%%

mask = [0 1 1 1 0 -1 -1 -1 -1 0 1 2 2 2 2 2 1 0 -1 -2 -2 -2 -2 -2 -2 -1 0 1

2 3 3 3 3 3 3 3 2 1 0 -1 -2 -3 -3 -3 -3 -3 -3 -3

1 1 0 -1 -1 -1 0 1 2 2 2 2 1 0 -1 -2 -2 -2 -2 -2 -1 0 1 2 3 3 3 3 3

3 2 1 0 -1 -2 -3 -3 -3 -3 -3 -3 -3 -2 -1 0 1 2 3];

cpt=1;


i=0;

j=0;


k=0;

for m=4:tail1+3

for n=4:tail2+3

if (z11(m,n) ~=0)

while ((z22(m+i,n+j)==0) & (k<48))

k=k+1;


i=mask(1,k);

j=mask(2,k);

end

if (z22(m+i,n+j)~=0)



tab1(cpt,1)=m-1;

tab1(cpt,2)=n-1;

tab2(cpt,1)= m+i-1;

tab2(cpt,2)= n+j-1;

cpt=cpt+1;

end


end

end


end

%%%%%%%%%%% coordonnées i,j des points de DET1 %%%%%%%%%%%%%%%%

tab1=tab1(1:cpt-1,1:2); %

%%%%%%%%%%% coordonnées i,j des points de DET2 %%%%%%%%%%%%%%%%

tab2=tab2(1:cpt-1,1:2); %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



Yüklə 0,54 Mb.

Dostları ilə paylaş:
1   ...   5   6   7   8   9   10   11   12   13




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin