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

Images Discussion :

Le calcul du centre de masse d'une image


Sujet :

Images

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Le calcul du centre de masse d'une image
    Bonjour,
    Je veux calculer le centre de masse de plusieurs forme dans une image j'ai tapé le code suivant:

    Code : 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
    xm=0;
    for i=1:n
        for j=1:m
     
            xm=j*filter(i,j)+xm;
        end
    end
    xm=(1/(m*n))*xm;
     
     
    ym=0;
    for i=1:n
        for j=1:m
            ym=i*filter(i,j)+ym;
        end
    end
    ym=(1/(m*n))*ym;
    Mais c'est juste pour une forme dans une image et j'ai utilisé le centroid mais ça marche que pour des formes fermées.
    Merci.

  2. #2
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Salut!

    Je veux calculer le centre de masse de plusieurs forme dans une image
    Peux-tu nous donner 3-4 examples des divers formes pour que tu veux calculer le centre de masse. Donc il faut que tu nous donne l'image pour que tu veux calculer le centre de masse pour qu'on a des chances de t'aider.


    J'attends ton reponse!

    Amicalment,

    Michel

  3. #3
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    A c'est la matrice de ton image que tu lis avec imread.



    Une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    C=cellfun(@(n) 1:n, num2cell(size(A)),'uniformoutput',0);
    [C{:}]=ndgrid(C{:});
    C=cellfun(@(x) x(:), C,'uniformoutput',0);
    C=[C{:}];
     
    CenterOfMass=A(:).'*C/sum(A(:),'double'),
    Aussi regarde la documenation pour ndgrid et cellfun:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>doc ndgrid
    >>doc cellfun
    >>doc num2cell

    Aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>doc bwlabel
    >>doc regionprops
    Si tu reussi postes ici la solution entiere ca va aidera les autres qui vont se confronter le meme probleme que toi!


    Ou si tu as encore des problemes continue cette discussion!

    J'espere que ca t'aides!

    Amicalment,

    Michel

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par mihaispr Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    C=cellfun(@(n) 1:n, num2cell(size(A)),'uniformoutput',0);
    [C{:}]=ndgrid(C{:});
    C=cellfun(@(x) x(:), C,'uniformoutput',0);
    C=[C{:}];
    ... tout ça pour simplement générer les permutations des indices de chaque pixel ... on devrait pourvoir faire plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [r,c] = meshgrid(1:size(A,2),1:size(A,1));
    C = [c(:) r(:)]
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Le calcul du centre de masse d'une image
    merci michel et dut, mais j'y arrive toujours pas avec votre code je trouve la meme chose qu'avec le centroid je trouve qu' un point au centre de l'image.
    J'aimerais trouver le centre de toutes les grosses tache blanche de l'image sur un fond noir.
    Merci encore je vous envoie mon image ci-joind.
    Images attachées Images attachées  

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par mihaispr Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>doc bwlabel
    >>doc regionprops
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    si tu veux analyser les différentes tâches, il faut d'abord les isoler,
    bwlabel te donnera une valeur pour chacun de tes objets
    tu peux effectuer des prétraitements à l'aide de morphologie mathématique pour éviter d'avoir trop d'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    %BW image binaire, n connectivité : 4 ou 8
    [L, num] = bwlabel(BW, n)
     
    %L image labelisée, num nombre d'objets
     
    %initialisation d'un tableau stockant tes centroïdes
    centroid=zeros(num,2);
     
    for indice=1:num
    %pour chaque objet identifiée, on fait la moyenne des coordonnées trouvées %pour calculer le centroide.
    centroid(indice,1:2)=mean(find(bwlabel==indice));
     
    end

  8. #8
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    J'ai regarde ton code jarlaxle et a partir de ton code j'ai fais ca:

    Code : 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
     
    >> img=imread('center_of_mass.jpg');imshow(img)
    >> BW=im2bw(img);imshow(BW);
    >> %BW image binaire, n connectivité : 4 ou 8
    [L, num] = bwlabel(BW, n)
     
    %L image labelisée, num nombre d'objets
     
    %initialisation d'un tableau stockant tes centroïdes
    centroid=zeros(num,2);
     
    for indice=1:num
    %pour chaque objet identifiée, on fait la moyenne des coordonnées trouvées %pour calculer le centroide.
    centroid(indice,1:2)=mean(find(bwlabel==indice));
     
    end
    Mais ca ne marche toujours

    Pourquoi?

    Il me donne cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ??? Undefined function or variable 'n'.


    How to define variable n?

    n=6?

    6 regions de l'image center_of_mass que j'ai sauve dans le dossier work?

    Si je fais l'initialisation ca me donne toujour une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    n=6;img=imread('center_of_mass.jpg');imshow(img)
    BW=im2bw(img);imshow(BW);
    %BW image binaire, n connectivit? : 4 ou 8
    [L, num] = bwlabel(BW, n)
    %L image labelis?e, num nombre d'objets
    %initialisation d'un tableau stockant tes centro?des
    centroid=zeros(num,2);
    for indice=1:num
    %pour chaque objet identifi?e, on fait la moyenne des coordonn?es trouv?es %pour calculer le centroide.
    centroid(indice,1:2)=mean(find(bwlabel==indice));
    end
    Erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ??? Function bwlabel1 expected its second input argument, CONN, to be either 4 or 8.
     
    Error in ==> bwlabel at 65
    [sr,er,sc,labels,i,j] = bwlabel1(BW,mode);
    J'attends vos reponses s'il vous plait!

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    n représente la connectivité, c'est à dire qu'on regarde les n plus proches voisins autour du point P.

    on 2 connectivités possibles :
    n=4 ,
    0 1 0
    1 P 1
    0 1 0

    n=8
    1 1 1
    1 P 1
    1 1 1

    donc n=6 te renvoie toujours une erreur, n vaut 4 ou 8 dans la fonction bwlabel.

  10. #10
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Ah oui je me souviens maintenant j'ai oublie il y a des pixels tetra et octo-connectes. J'ai regarde un lien sur google.

    Bon. Ca fait tres bien le calcul mais toujours une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ??? Error using ==> iptchecknargin
    Function BWLABEL expected at least 1 input argument
    but was called instead with 0 input arguments.

    Error in ==> bwlabel at 47
    iptchecknargin(1,2,nargin,mfilename);


    J'ai remplace dans le code n=6 par n=4 et puis j'ai teste aussi avec n=8. Ca donne bien le resultat.

    Mais une petite erreur encore persiste

    Merci beacoup pour ton reponse!

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Le calcul du centre de masse d'une image
    Merci jarlaxle et mihaispr pour votre aide.
    Je trouve la meme erreur que toi je sait pas c'est a cause de quoi , je vais essayer de trouver la solution et si j' y arrive j'envoie la reponse .
    encore merci .


    ??? Error using ==> iptchecknargin at 57
    Function BWLABEL expected at least 1 input argument
    but was called instead with 0 input arguments.

    Error in ==> bwlabel at 47
    iptchecknargin(1,2,nargin,mfilename);

    Error in ==> detection_visage at 208
    Centroid(indice,1:2)=mean(find(bwlabel==indice));

  12. #12
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    A mon avis il doit juste s'agir d'une faute d'inattention.
    BWLABL est une fonction, on ne peut l'utiliser comme variable.
    D'ailleurs dans le code de jarlaxle elle est utilisée dès la 1ère ligne.
    Par contre, n'y connaissant rien, je ne sais pas quelle variable il voulait réellement mettre. BW peut-être ?
    Enfin vous vous devriez savoir normalement
    Règles du Forum

    Adepte de la maïeutique

  13. #13
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    OUi je remplacais comment tu as dit.


    Il faisait confusion entre le nom de variable et le nom de la fonction.

    Merci pour ton reponse caro! C'etait une faute de manque d'attention de ma part!

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    désolé pour l'erreur, en fait ça sera l'image nommé "L" (labellisée) que tu vas utiliser dans cette méthode

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Le calcul du centre de masse d'une image
    Merci a vous tous j'ai enfin compris .

Discussions similaires

  1. Calcul de centre de gravité d'une matrice
    Par hakoumca dans le forum MATLAB
    Réponses: 9
    Dernier message: 27/02/2014, 23h12
  2. calcul du centre de gravité d'une image
    Par lucciana dans le forum C++
    Réponses: 14
    Dernier message: 17/02/2011, 15h57
  3. Calcul du centre de masse de toutes les régions d'une image
    Par mihaispr dans le forum Téléchargez
    Réponses: 0
    Dernier message: 26/07/2009, 15h03
  4. Réponses: 18
    Dernier message: 18/06/2009, 18h57

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