Bonjour;
je voucrais avoir les formules mathématiques qui permettent de rendre les moments de Zernike invariables en translaion, rotation et changement d'echelle.
Merci.
Bonjour;
je voucrais avoir les formules mathématiques qui permettent de rendre les moments de Zernike invariables en translaion, rotation et changement d'echelle.
Merci.
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Merci pseudocode, c'est vrai que si je fais une rotation de mon image de 180° ou 90° les coefficients ne changnet pas, mais si je fais une rotation de 60° ou 30° ou n'importe quelle autre angle les coefficients changent!
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Tu as raison pseudocode c'est la discrétisation des pixels lorsque je fais une rotation ou un changement d'echelle de mon objet qui modifie un peu les moments. Il faudrais peut etre essayer de modifier mes images avec un logiciel de vectorisation, et non pas avec des logiciels classiques comme Paint ou Matlab avec ses imrotate et imresize.
Merci bcp.
mais est-ce qu'ils sont réelement invariables en translation? si ma forme se trouve par exemple en haut à droite et que je la translate pour la rendre par exemple en bas à gauche est-ce que les moments de Zernike changeront?
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
D'abord merci beaucoup pour ces réponses qui m'ont étaient d'une grande aide dans mon travail.
ensuite j'ai un petit problème lorsque je veux normaliser les moments de Zernike dans l'intervalle [0,1]: certains moments ont une magnitude supérieur à 1. j'ai utlisé une l'image du logo de Mercedes
Voici mon programme principal en matlab:
Code matlab : Sélectionner tout - Visualiser dans une fenêtre à part
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 im2= imread('mercedes.jpg'); im2=rgb2gray(im2); im2= edge(im2,'canny'); Z=zern(im2,[0 1 2 3 4 5 6 7 8]);%Calculer les moments de Zernike de l'ordre0 jusqu'à l'ordre8 for k=1:size(Z,2) % On va prendre la magnitude de chaque moment de Zernike pour l'invariance en Z(k)=Z(k)*conj(Z(k));%rotation end; Z=Z/Z(1,1);%Normalistaion les moments de Zernike doivent appartenir à l'intervalle [0,1] en divisant par le moment Z(0,0) pour calculer les moments de Zernike j'utilise le code: function [A_nm,zmlist,cidx,V_nm] =zern(img,n,m)%Calcul des moment de Zernike de l'image img %A_nm:est le moment de Zernike qu'on recherche (Z_nm) d = size(img); img = double(img); xstep = 2/(d(1)-1); %pas pour le balayage selon x de -1 à +1 ystep = 2/(d(2)-1); %pas pour le balayage selon y de -1 à +1 [x,y] = meshgrid(-1: xstep:1,-1: ystep:1); %découpage en grille sur les 2 axes de -1 à +1 circle1 = x.^2 + y.^2; %pour ne prendre en consideration que les points se trouvant inside = find(circle1<=1); %à l'interieur du cercle unité mask = zeros(d); %on masque tout les points qui mask(inside) = ones(size(inside)); %ne se trouvent pas dans le cercle unité [cimg,cidx] = clipimg(img,mask) ; z = clipimg(x+i*y,mask) ; p=abs(z); theta = angle(z) ;%en radians entre -pi et +pi c = 1; for order=1:length(n) n1 = n(order); if nargin<3 m = zpossible(n1); %toutes les répetitions possibles pour l'ordre n1 end for r=1:length(m) V_nmt = zpoly(n1,m(r),p,theta);%zpoly(n1,m(r),p,theta) %%Vnm(x,y)=Vnm(rho,theta)=Rnm(rho)exp(j*m*tetha) zprod = cimg.*conj(V_nmt) ; A_nm(c) = (n1+1)*sum(sum(zprod))/pi; % Znm :Moment de Zernike d'ordre n et de repétition m zmlist(c,1:2) = [n1 m(r)]; if nargout==4 V_nm(:,c) = V_nmt; end c = c+1; end end function [cimg,cindex,dim] = clipimg(img,mask) dim = size(img); cindex = find(mask~=0); cimg = img(cindex); return; function [m] = zpossible(n) %Renvois les valeurs possibles de répétition pour chaque %ordre n if ~mod(n,2) %si n est pair m = 0:2:n ; else m = 1:2:n; end return; function [V_nm,mag,phase] = zpoly(n,m,p,theta) %Calcul de Rnm(rho): polynome radial %de Zernike R_nm = zeros(size(p)); a = (n+abs(m))/2; b = (n-abs(m))/2; total = b; for s=0:total num = ((-1)^s)*factorial(n-s)*(p.^(n-2*s)); %numerateur den = factorial(s)*factorial(a-s)*factorial(b-s); %denominateur R_nm = R_nm + num/den; end mag = R_nm; phase = m*theta; V_nm = mag.*exp(i*phase); % Vnm(x,y)=Vnm(rho,theta)=Rnm(rho)exp(j*m*tetha) return;
Le résultat aprés normalisation est (l'affichage sous matlab):
comme vous voyez il y'a un moment dont la magnitude >1 (2.5350)Columns 1 through 10
1.0000 0.0040 0.5356 0.0088 0.0293 0.0485 2.5350 0.0034 0.0488 0.0263
Columns 11 through 20
0.1366 0.0021 0.0182 0.0044 0.0094 0.0125 0.0556 0.3053 0.0010 0.0022
Columns 21 through 25
0.0005 0.0331 0.0001 0.0979 0.0035
j'ai aussi essayer avec l'image de Ford:
Voici le résultat:
Encore un autre moment qui dépasse 1 (2.7196)Columns 1 through 10
1.0000 0.0102 2.7196 0.2045 0.0441 0.0048 0.9192 0.5624 0.0684 0.0511
Columns 11 through 20
0.0111 0.0036 0.2221 0.0750 0.1721 0.0285 0.0327 0.0083 0.0059 0.0026
Columns 21 through 25
0.0255 0.0386 0.0133 0.0802 0.0130
SVP EST CE QUE QUELQU'UN POURRAIT M'AIDER???????
comme je ne peux pas vous uploader les deux images que j'ai utilisée vous pouvez visualiser deux images asez proches de celles que j'ai utilisée:
Je ne connais pas Matlab, donc je ne peux pas t'aider sur ton code. Pour la partie algorithmique, je te conseille la lecture de ce document : Improvement and Invariance Analysis of Zernike Moments
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Je ne crois pas que les moments de Zernike soient invariants à la translation, d'autant qu'ils sont calculés dans une représentation polaire de l'image, et donc très liés au choix du centre. Le fait de normaliser par Z00 ne fait que les rendre invariants à l'échelle (en fait en faisant cela on ne normalise que par la surface de l'image).
Il y a des travaux pour rendre ces moments invariants à la translation. Mais plus on normalise, plus on perd en précision. Voir par exemple ici.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Merci pour les réponses, je voulais seulement savoir dans les études on dit qu'aprés avoir calculer les moments de Zernike, il faut les normaliser en;
1) prenant la magnitude de chaque moment
2) diviser par Z00.
c'est justement quand on prend la magnitude des moments que la magnitude de certains moments vont devenir > à la magnitude de Z00 par exemple si Z00=13500 et Z40=-15000 alors en prenant la magnitude |Z40|=15000 va devenir plus grand que Z00, et donc aprés en divisant par Z00 ce moment sera plus grand que 1, mais dans les études que j'ai lu ils ne parlent pas de ce probléme!!!! ils disent que tout les moments appartiennent à [0,1].
OU EST LE HIC??????
Le hic c'est que les moments de Zernike qu'ils soient normalisés ou non ne sont pas vraiment censés être bornés... Evidemment à partir des définitions on doit pouvoir établir une borne sup théorique et diviser par cette borne, mais je ne suis pas certain que ce soit très pertinent. Où as-tu lu qu'ils doivent être entre 0 et 1 ?
Dans beaucoup d'études par exemple ici:
http://citeseerx.ist.psu.edu/viewdoc...=rep1&type=pdf
Je ne vois pas où, peux-tu citer l'endroit précis ?
Dans la deuxiéme page, deuxième colonne où on peut lire:
"The magnitudes are then normalized into [0, 1] by dividing them by the
mass of the shape."
Je sais que le message date, mais je suis actuellement en train de travailler sur ces moments (pas supers pratiques à maniés ^^), et en fait, pour en revenir au problème, pour normaliser il ne faut non pas divisé par Z00, mais par la masse
Source :Get the order (0,0) geometric moment 00 m of the
image.
m00 = ∫∫f(x,y)dxdy (9)
from physics viewpoint, 00 m is the expression of mass
or area of an image.
http://sibgrapi.sid.inpe.br/col/sid....7.56/doc/2.pdf
Page 3!
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
en retour sur le même sujet, avec quel erreur ou distance peut on dire que les moments de Zernike sont invariants à la translation?
en plus, lorsque on change l'origine de l'image au barycentre cela ne remet pas en question l'invariance à la rotation?
Merci.
PseudoCode l'explique dans sa première réponse.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
- ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager