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

Langage Delphi Discussion :

[D6] Algo de détection de zones dans une image


Sujet :

Langage Delphi

  1. #1
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut [D6] Algo de détection de zones dans une image
    Salut !,

    Je dois analyser des images (j'utilise TBitmap32 en l'occurence) comme par exemple celle-ci :



    Bien sûr il n'y a pas les rectangles rouges que j'ai ajouté manuellement, et c'est justement cela que je souhaite obtenir automatiquement.

    Pour info, peu m'importe dans cet exemple si je n'obtiens pas les deux rectangles en bas à droite mais un seul les englobant. Aussi le fond (en blanc là) est bien défini comme transparent.

    Je me perds dans mes vaines recherches de "segmentation algorithm", "edge detection algorithm" et autres "flood fill algorithm". Ne sachant d'ailleurs pas vraiment quel(s) type(s) d'algo je dois utiliser pour arriver enfin à avoir cet ensemble de TRect.

    C'est pourquoi je fais appel à l'expertise collective de DVP et remercie d'avance quiconque me donnera une piste.

    Michel.

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Points : 67
    Points
    67
    Par défaut
    Salut,

    je suis loin d'être un expert dans tout ce qui est détection d'image mais en imaginant un algorithme naïf on pourrait faire la chose suivante:

    considérer que l'image est un tableau de booléen (ou une image à 1 bit). Il y a absence ou présence de couleur sur le pixel.

    ensuite tu te retrouves avec un tableau de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    0000000000
    0011100000
    0011000110
    0011100110
    0000000000
    ensuite tu n'as plus qu'a faire un petit algo de détection de 1 consécutifs pour détecter les coins les plux extrèmes des carrés et les dessiner sur l'écran.

    c'est assez sale et aussi très lent, ca ne gère absolument pas les bruits éventuels qu'il y a sur l'image mais tu ne semble pas avoir besoin d'un algo très poussé.

    sinon tu peux toujours faire une recherche sur le forum algo, il semble que le problème a été abordé de nombreuses fois...

  3. #3
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Je n'ai en effet pas besoin d'un algo très poussé.
    J'ai en quelques sortes déjà le tableau binaire dont tu parles (la composante de transparence à 0 ou pas est mon critère). Ce qui me pose problème est bien de former ces satanés rectangles d'encombrement : je n'arrive pas m'immaginer le code capable d'une telle chose pour le moment.

    Merci de me rappeler très justement le forum algo ! Il semble effectivement que j'y trouve des choses très interessantes (au moins quoi chercher).

    Je me dis moi aussi que ce que je cherche a déjà dû être fait. Donc au lieu de réinventer la roue carré... Je continue de chercher.

    Je reviendrai poster ici le résultat de ces recherches (si résultats il y a).

    a+

    Michel.

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Points : 67
    Points
    67
    Par défaut
    pour ce qui est de l'algo de détection des rectangles tu peux faire un petit algo assez simple.

    Il faut tout d'abord que tu prévoies un tableau de tableau de TPoint qui va contenir tout les ensembles que tu trouve dans l'image.

    Tu parse ton tableau point par point, si ton point est rempli, tu regarde dans les tableaux de points si il y a un point adjacent qui existe déja, si c'est le cas tu ajoutes ton point à la liste des points du carré correspondant. Dans le cas ou il n'y a aucun point adjacent tu crée un nouveau tableau de point auquel tu ajoute le point que tu viens de trouver.

    Une fois que tes tableaux sont remplis tu cherche les extrémités X et Y de chaque tableau, ce qui te donne les 4 points du carré à dessiner.

  5. #5
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Oui effectivement bien vu : c'est cet algo là que j'ai en tête depuis hier.
    Un espèce de "FloodFill". Le plus dur étant d'en trouver/et/ou/faire une implémentation valable (sans débordement de pile avec la méthode par récursion, et sans utilisation abusive de la mémoire avec l'utilisation d'une pile -stack-).
    C'est effectivement une solution, au choix avec les 4 ou 8 pixels connexes, de proche en proche, pour enfin déterminer l'encombrement.

    Je viens de trouver il y a qques minutes une autre piste, consistant à diviser l'image en 4 zones, et ceci de facon récursive, jusqu'à obtenir des zones comportant un minimum (défini préalablement, et à affiner) de pixels "interessants" (on cesse evidemment de découper quand on tombe sur une zone "vide" ou quand le minimum est atteint). Cette méthode est moins précise que la premiere, mais je la sens intuitivement plus rapide (ca reste à vérifier bien entendu).

    En tous les cas merci d'avoir réfléchi à mon problème, que je considère au vue de ces 2 pistes résolu.

    Je suis impatient d'aller coder ! C'est reparti.

    a+

    Michel.

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

Discussions similaires

  1. Détection de forme dans une image
    Par Rhaaapsod dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 17/11/2008, 11h15
  2. Détection de cercles dans une image
    Par abs2008 dans le forum Images
    Réponses: 6
    Dernier message: 29/05/2008, 13h47
  3. Détection des plans dans une image 3D
    Par paradize3 dans le forum Traitement d'images
    Réponses: 13
    Dernier message: 02/10/2007, 09h43
  4. Réponses: 7
    Dernier message: 01/05/2007, 21h55
  5. Détection de visages dans une image en niveaux de gris
    Par bert_ dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 04/04/2007, 18h04

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