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 :

Capturer la frontière d'une forme en 2D


Sujet :

Traitement d'images

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut Capturer la frontière d'une forme en 2D
    Bonjour a tous,

    J'ai une image A, 2D binaire, sur un simple exemple imaginons que j'ai un cercle rouge plein (1 à l'intérieur) dans une image blanche (0 à l'extérieur du cercle).
    J'aimerais ne conserver de cette image que la frontière du cercle, l'anneau, donc mettre l'intérieur du cercle à 0.

    schématiquement : un cercle rouge plein sur une feuille blanche (je veux)-> l'anneau rouge sur la feuille blanche.

    Comme algo. j'ai pensé à:

    créer une copie de l'image A, l'étirer et faire ensuite la différence, du coup à un pixel prés j'ai uniquement la frontière du cercle.
    Mon problème et comment étirer l'image A d'un pixel dans toutes les directions (i,j)?
    Je pensais la chose simple mais quand j'ai commencé à écrire le code je me suis vite retrouver avec beaucoup de boucle, ou beaucoup de 'if'

    Auriez-vous une idée lumineuse pour étirer cette image? J'utilise Matlab, mais je préférerai un algo. malin plutôt qu'une fonction built-in.

    Ou bien capturer la frontière du cercle de manière différente, qu'en soustrayant une copie?

    Merci,

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    Je suppose que l'image est matricielle.

    Ce que tu cherches à faire est une optimisation. Mais ce n'est pas bon. Commence déjà par écrire un code simple et compréhensible. On verra un autre jour pour l'optimisation.
    Leurre classique.

    Il y a la frontière de blanc par rapport à rouge et la frontière de rouge par rapport à blanc.
    Je suppose qu'on cherche un point de frontière rouge (par rapport à blanc).
    Le point (x,y) est un point de cette frontière si il est rouge et si (x+1,y) ou (x-1,y) ou (x,y+1) ou (x,y-1) est blanc. N'est-ce pas ?

    Tu peux raffiner en incluant les diagonales ... mais je ne le conseille pas.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Si ta forme est systématiquement un disque, étirer puis comparer avant/après peut constituer une piste.
    Mais si la forme centrale n'est plus un disque, mais une forme plus complexe -une forme concave en particulier-, il y a pas mal de cas où ça ne marchera plus.

    Et avec des formes plutôt simples comme des triangles, ça marche, mais seulement une fois qu'on a trouvé la formule magique qui nous dit autour de quel point il faut étirer l'image.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 56
    Points
    56
    Par défaut
    Merci à vous deux,
    ça m'a donné des idées

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    En général pour les frontières le calcul est simple, en ligne à ligne :


    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
    pour i = 0 jusqu'à DimY
     
       début <-- -1
       pour j = 0 jusqu'à DimX
     
       si ( pixel[i][j]  NON EGAL fond )
          {
              if ( début  EST négatif  )
                 {
                      début <-- j
                 }
              fin <-- j
          }
       sinon
          {
               si ( début  EST positif )
                  {
                       stocke  début, fin
                       début <-- -1
                   }
          }
     
       fin pour
    fin pour
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  6. #6
    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
    +1 avec Flodelarab, c'est la façon la plus simple de faire.

    Sinon tu peux utiliser une erosion avec un element structurant unitaire et une soustraction : Resultat = Image - Erosion(Image, SE1). Cela fera exactement le même travail !
    SE1 peut être un carré ou une croix en fonction de la topologie (voisinage) que tu souhaites.
    Ces opérations sont disponibles dans toutes les librairies.
    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.

  7. #7
    Membre éprouvé

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Avril 2014
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 133
    Points : 1 082
    Points
    1 082
    Par défaut Logiciels pour ...
    Bonjour,

    J'utiliserai la solution proposée par Toto13 si j'avais à résoudre ton problème.
    Tu peux utiliser la bibliothèque EdVision que j'ai développé et mis à disposition du site
    Développez.com, accessible à partir de mon 6 è article.
    L'algorithme d'Erosion est expliqué article 4.
    Dans l'article 2 tu trouveras les éléments pour programmer la différence entre les images.
    Bon Courage.
    Cordialement

    Patrick Bonnin

    ===========================

    Partie 2 : Visualisation des Images et Opérateurs Simples
    http://patrick-bonnin.developpez.com...teurs-simples/


    Partie 4 : Première Chaîne Complète de Segmentation
    http://patrick-bonnin.developpez.com...-segmentation/

    Partie 6 : Environnement
    http://patrick-bonnin.developpez.com...I-utilisation/

Discussions similaires

  1. [VB6] [Excel] Feuille dans une form, sans excel installé
    Par ro2v dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 05/05/2010, 13h45
  2. comment faire une capture d'ecran sur une form?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/08/2007, 20h20
  3. Réponses: 2
    Dernier message: 14/04/2007, 13h33
  4. Capture d'une form non visible
    Par Linkin dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/04/2004, 15h58
  5. [VB6][Formulaire]Appliquer un Scrollbar a une Form
    Par Boil dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/11/2002, 04h51

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