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 :

La position entre deux objets dans une image


Sujet :

Traitement d'images

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut La position entre deux objets dans une image
    bonjour à tous ;
    SVP est ce qu'il ya personne qui peut m'aider et me dit comment calculer la distance entre deux objets dans une image aprés la segmentation bien sur. et comment faire pour déterminer la position d'un objet par rapport à un autre par exemple comment faire pour dire que l'objet 1 est à droite de l'objet 2. c'est à dire comment déterminer les relations spatiales entre les différents objtes dans une image.

    SVP, une aide, une précision, j'ai perturbé.?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Pour l'instant, ce n'est pas un problème spécifique à MATLAB mais bel et bien un problème d'algorithme.

    De plus, peux-tu nous montrer un aperçu des images sur lesquelles tu travailles ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    les images que je doit les utilisées sont des images hyperspectrales. mais mois au début j'aime bien de commencer avec un exemple simple d'image comme L'image Pillsetc.png du matlab et par la suite on passe à appliquer l'exemple à une image hyperspectrale.

    est ce que j'utilise tout d'abord Bounding Box de la fonction regionprops pour encadrer chaque objet mon problème ici est comment utiliser boundingBox et comment afficher le rectangle qui englobe chaque objet. SVP, vous pouvez me donner un pseudocode de ce travail c'est à dire l'utilisation du boundingBox parce que j'ai pas compris l'exemple que je trouver dans matlab. voilà le programme qui j'utilise et merci.

    code

    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
    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
    RGB = imread('pillsetc.png');
    imshow(RGB);
    I = rgb2gray(RGB);
    threshold = graythresh(I);
    bw = im2bw(I,threshold);
    imshow(bw)
    % remove all object containing fewer than 30 pixels
    bw = bwareaopen(bw,30);
     
    % fill a gap in the pen's cap
    se = strel('disk',2);
    bw = imclose(bw,se);
     
    % fill any holes, so that regionprops can be used to estimate
    % the area enclosed by each of the boundaries
    bw = imfill(bw,'holes');
     
    imshow(bw)
    [B,L] = bwboundaries(bw,'noholes');
     
    % Display the label matrix and draw each boundary
    imshow(label2rgb(L, @jet, [.5 .5 .5]))
    hold on
    for k = 1:length(B)
      boundary = B{k};
      plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)
    end
    stats = regionprops(L,'Area','Centroid');
     
    threshold = 0.94;
     
    % loop over the boundaries
    for k = 1:length(B)
     
      % obtain (X,Y) boundary coordinates corresponding to label 'k'
      boundary = B{k};
     
      % compute a simple estimate of the object's perimeter
      delta_sq = diff(boundary).^2;
      perimeter = sum(sqrt(sum(delta_sq,2)));
     
      % obtain the area calculation corresponding to label 'k'
      area = stats(k).Area;
     
      % compute the roundness metric
      metric = 4*pi*area/perimeter^2;
     
      % display the results
      metric_string = sprintf('%2.2f',metric);
     
      % mark objects above the threshold with a black circle
      if metric > threshold
        centroid = stats(k).Centroid;
        plot(centroid(1),centroid(2),'ko');
      end
     
      text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y',...
           'FontSize',14,'FontWeight','bold');
     
    end

  4. #4
    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 : 46
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    pour les agencements entre les objets, pourquoi ne calcule tu pas le coefficient directeur de la droite passant par leur barycentre. Comme cela tu sauras exactement l'orientation d'un objet par rapport à un autre.
    En revanche pour la distance entre objets, tu n'auras qu'une distance en pixel si tu ne connais pas l'échelle. Et encore, tu n'as pas d'information de profondeur. Donc tu n'auras qu'un positionnement 2D et aucune information 3D.
    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.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 192
    Par défaut
    Pour la distance entre deux objets étiquetés :

    Pour chaque objet o, calcul du centre de gravité g
    Alors D(o1, o2) = D(g1, g2)
    C'est pas une méthode terrible, mais si tes objets ont tous la même taille et que tu souhaites une évaluation des distances pour en extraire la plus petite par exemple, cette méthode peut suffire.

    A partir de l'image Img des objets étiquetés (o1, o2, ...), tu effectues une dilatation au sens V4 ou V8. La distance entre les deux objets corresponts à deux fois le nombre de dilatations nécessaires pour que o1 et o2 s'intersectent.
    Si tu cherche une méthode la plus exact possible pour calculer la distance entre les bors de deux objets, celle ci est très bonne. De plus la précision de la distance peut etre améliorée grace à des méthode comme Borgefors.

    Pseudo-code rapide :
    d = o
    Tant que vrai
    Si o1 intersection o2 != null
    retourne d * 2
    Dilatation (Img)
    d++

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    Merci toto pour votre solution mais j'ai pas compris bien votre solution tu peut me donner un exemple plus claire pour l'orientation d'un objet et sa position par rapport à un autre.

    bonjour à tous;

    Je cherche un code matlab qui utilise le bounding box pour encadrer chaque objets d'une image segmentée dans un rectangle minimal. et comment l'appliqué dans mon code précédent, vraiment j'ai perturbé.

    et merci d'avance.

  7. #7
    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 : 46
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Citation Envoyé par jolie Voir le message
    Je cherche un code matlab qui utilise le bounding box pour encadrer chaque objets d'une image segmentée dans un rectangle minimal. et comment l'appliqué dans mon code précédent, vraiment j'ai perturbé.
    Ca c'est une question purement MatLab, pas Algo. Or ta discussion est maintenant dans la forum Algo. Mais comme ça me semble un problème classique, je pense ne pas trop m'avancer pour dire qu'il doit y avoir quelques discussions sur le sujet dans le forum MatLab.

    Pour ce qui est de ma proposition de solution ci-dessus concernant la position d'un objet par rapport à un autre :
    - tu calcules le centre de gravité (barycentre) de chaque objet.
    - tu calcules l'équation de la droite passant par les centres de gravité.
    - le coefficient directeur de la droite t'informe sur la position d'un objet par rapport à l'autre.

    Sinon, tu peux faire la même chose en calculant simplement l'angle en degrés d'un barycentre par rapport à l'autre. Ce serait même plus simple et plus facile ensuite pour interpréter les positions relatives.
    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.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par jolie Voir le message
    Je cherche un code matlab qui utilise le bounding box pour encadrer chaque objets d'une image segmentée dans un rectangle minimal.
    Si les bords du rectangle reste parrallèles aux bord de l'image => Calcul de distances

    Sinon, en quoi le rectangle devrait-il être "minimal" ? Selon son périmètre, sa surface...

    Pour ce type d'algorithme, je m'étais intéressé à ceci à une époque : Rotating Calipers

    Pour MATLAB, ce n'est pas vraiment une question relative à la programmation MATLAB... plutôt une demande pour un code tout fait

    Et comme on est généreux : Minimal Bounding Rectangle

    Donc maintenant, si il y a une vrai question relative à la programmation sous MATLAB, alors on se retrouvera dans le forum MATLAB

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut remercement
    merci beaucoup pour votre aide, sayé j'ai résolut le problème

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

Discussions similaires

  1. Extraire coordonnées entre deux points dans une image
    Par Pg043 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 16/01/2009, 09h35
  2. [Photoshop]séléctionner un objet dans une image
    Par stanley dans le forum Imagerie
    Réponses: 5
    Dernier message: 29/06/2006, 20h15
  3. Comptage du nombre d'objets dans une image
    Par fire.stone dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/02/2006, 21h26
  4. Choix entre deux champs dans une requete
    Par Pico10 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/07/2005, 15h36

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