IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

Comment rendre les moments de Zernike invariants ?


Sujet :

Traitement d'images

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Comment rendre les moments de Zernike invariants ?
    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.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par farah Voir le message
    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.
    Les moments de Zernike sont par nature invariants aux rotations.

    Pour les rendre invariants aux translations et changement d'échelle il suffit de les normaliser, c'est à dire les diviser par Z00, le 1er moment de zernike.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Réponse
    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!

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par farah Voir le message
    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!
    Faire une rotation de 30° ca modifie forcément les valeurs des pixels (a cause de la discrétisation), donc cela modifie la valeur du moment de Zernike. Mais normalement le changement ne doit pas être très important.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Réponse
    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?

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par farah Voir le message
    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?
    Heu... normalement oui. Si tu les normalises, les moments de Zernike sont invariants.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    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):
    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
    comme vous voyez il y'a un moment dont la magnitude >1 (2.5350)

    j'ai aussi essayer avec l'image de Ford:

    Voici le résultat:
    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
    Encore un autre moment qui dépasse 1 (2.7196)
    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:


  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    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.

  9. #9
    Invité
    Invité(e)
    Par défaut
    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.

  10. #10
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par motton75 Voir le message
    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).
    C'est pour cela que l'on prend en général le barycentre de la forme.
    A ce moment là, les moments de Zernike sont invariants par translation.
    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.

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par motton75 Voir le message
    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).
    Ah, oui. Je n'avais pas compris le problème. Je pensais qu'on parlait de translater l'image ET le centre du repère simultanément.

    Il faut effectivement centrer l'image originale avant de calculer les moments.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #12
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    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??????

  13. #13
    Invité
    Invité(e)
    Par défaut
    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 ?

  14. #14
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Dans beaucoup d'études par exemple ici:
    http://citeseerx.ist.psu.edu/viewdoc...=rep1&type=pdf

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je ne vois pas où, peux-tu citer l'endroit précis ?

  16. #16
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    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."

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    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

    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.
    Source :
    http://sibgrapi.sid.inpe.br/col/sid....7.56/doc/2.pdf
    Page 3!

  18. #18
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par PouuleT Voir le message
    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
    A un facteur près (1/PI), c'est pareil.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  19. #19
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    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.

  20. #20
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. les moments de zernike invariant au changement d'échelle
    Par mar1985 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 02/05/2013, 14h39
  2. Réponses: 2
    Dernier message: 15/05/2007, 11h34
  3. [VB.NET]Comment rendre les menus inaccessible?
    Par Pedro Varela dans le forum Windows Forms
    Réponses: 7
    Dernier message: 19/10/2006, 14h22
  4. [VB.Net] Comment rendre les élements du menu shared
    Par Pedro Varela dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/10/2006, 16h13
  5. Comment rendre les tableaux moins "carrés"?
    Par Dnx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/10/2005, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo