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 :

Modelisation de batiments à partir de carte de type Mappy


Sujet :

Traitement d'images

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Modelisation de batiments à partir de carte de type Mappy
    Bonjour a tous ,

    mon problème est d'extraire les immeubles (par exemple en les binarisant) a partir d'une image (RGB) de type carte Mappy,
    et donc polluée par un certain nombre d'informations (le texte recouvrant les bâtiments).
    Sachant que certains endroits seraient de toute façon a reprendre a la main (typiquement là où un panneau recouvre un immeuble sur la carte).

    A partir d'une certaine suite de traitements (morphologie mathématique : érosions, ouvertures, additions, squelettisation etc...)
    je parviens a un résultat qui est pas trop trop mal mais qui n'est pas encore top notamment au niveau des zones ou le texte chevauche des bordures d'immeubles.
    Je me demande si ce que ce genre de traitement a déjà ete fait ? ou bien qui pourrait me donner des conseils sur le traitement a appliquer ?

    Par rapport a mon algo, Je pense qu'un axe d'amélioration pourrait être lors de la reconstruction de ligne rectiligne brisée (dans une image binaire avec les trames des immeubles, rejoindre les 2 bouts d'une ligne à l'endroit ou il y avait du texte).
    Est ce que quelqu'un aurait un algo la dessus, ou mieux un code en C?

    Je joins 2 images à titre d'exemple de données d'entrée.

    Merci !

    -----------------------------------------------------------------------

    un petit rajout :

    Quelques détails sur la démarche que je suis :
    (méthode globale, même si je ne detaille pas l'application d'un filtre median ou d'une ouverture de temps a autre pour améliorer le rendu)



    extraction uniquement du texte sur l'image d'origine et binarisation (à partir d'un seuillage)
    -> imagenoms

    extraction sur l'image d'origine de la zone en jaune correspondant uniquement aux bâtiments (grâce a un seuillage sur l'image RGB) et binarisation.
    Donc on a des "trous" sur ces batiments (a l'interieur et/ou sur les bords) aux endroits où le texte etait present.
    -> image1

    rebouchage de ces trous :
    pour cela je crée un masque correspondant a la zone bâtiments :
    3 érosions sur l'image d'origine, puis seuillage sur l'image RGB de la zone en jaune correspondant aux bâtiments, et binarisation (sur ce masque il n'y a plus les petites séparations entre les immeubles).
    je fais un NOR entre ce masque et l'image comprenant uniquement le texte (imagenoms), afin d'obtenir :
    une image (binaire) avec le texte présent seulement au niveau des bâtiments.

    Puis j'ajoute cette image dans le but de reboucher les trous
    -> image2
    J'ai maintenant une image binaire où sont présents les immeubles, mais aussi :
    - des raccordements entre les immeubles,a l'endroit ou le texte était présent entre 2 immeubles
    - des petites excroissances, a l'endroit ou le texte était a cheval entre 1 immeuble et la rue.




    pour faire disparaitre les raccordements entre les immeubles, je vais tenter d'isoler ces raccordements, puis de les soustraire a image2 :

    dans un premier temps, je me débrouille pour obtenir une image comprenant seulement les lignes entourant les immeubles (s'obtient facilement a partir d'un seuillage sur l'image RGB)
    -> image3
    J'obtiens cette image, mais un certain nombre de lignes ne sont pas fermées (là ou il y avait du texte), alors pour les fermer au mieux je :
    - fais 5 dilate pour allonger les lignes (nombre choisi 1 peu a la louche, assez grand pour qu'il y ait un effet visible mais pas trop pour ne pas mixer plusieurs lignes proches)
    - squeletise l'image autant que possible
    le résultat est l'image binaire contenant les contours des immeubles, où un certains nombre de segments "troués" se sont recollés. Ce n'est pas le cas des segments où le trou était trop large.
    -> image3'

    Je multiplie cette image binaire (image3') par l'image binaire contenant les noms, donc le résultat est une image qui contient uniquement les zones où le texte se superpose aux bordures d'immeubles.

    Je soustrais cette dernière image à image2 afin de faire disparaitre tant que possible les raccordements entre immeubles.
    Images attachées Images attachées     

  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 084
    Points
    16 084
    Par défaut
    Je dirais une sorte d'inpainting vectoriel, le problème etant de gérer la rencontre de 2 segments.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Exploiter les couleurs aussi, c'est à dire ne boucher que les trous laissés par le texte : chaque frontière orange qui est interrompue par du texte noir est prolongée dans sa continuité.

  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 : 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
    Bonjour,

    pourquoi ne pas commencer par segmenter en fonction des couleurs ?
    Cela isolera certaines parties comme les rues, puis une simple fermeture supprimera le texture.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci,
    pour vos avis et suggestions.

    inpainting vectoriel : de quoi s'agit il ?

    En effet l'avantage de travailler avec des images RGB est qu'il est facile d'isoler les contours en orange.
    j'obtiens donc assez directement les image que je nomme mapX_segmentée.
    il y a bien sur des trous dans certains raccordements au niveau où du texte est présent sur l'image de départ.
    Pour tenter de reboucher ces discontinuités dans les segments, je vais appliquer 2 fois le traitement :
    (2xdilatation + squeletisation),
    ce qui me donne les image que je nomme mapX_traitée.

    c'est une méthode qui a l'avantage d'être simple car elle utilise seulement la morphologie mathématique,
    j'utilise des dilatations pour "allonger" quelque peu les lignes incompletes, et une squelettisation pour revenir à l'état initial.
    l'inconvénient est que je ne peux pas faire trop de dilatations sous peine de déformer l'image, et donc je ne peux pas de toute façon reboucher les trous trop grands au milieu d'une ligne.

    C'est pour cela que je me disais qu'il devait déjà exister une façon de fermer tous les segments d'une image.

    Par rapport a mon problème global, ce traitement visant a reboucher les lignes est une étape qui me permettrait de séparer ensuite correctement les bâtiments qui se touchent.
    Images attachées Images attachées     

  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 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Matrim Voir le message
    inpainting vectoriel : de quoi s'agit il ?
    Comme l'inpainting par isophote, mais en utilisant les segments de droites comme support.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En effet Pseudocode, j'ai été voir sur le site ton module pour image J de inpainting par isophote, le résultat est chouette, mais ca n'est pas super efficace dans le cas de mes images.
    Ce que tu dis c'est qu'il faudrait reprendre le module pour travailler sur des segments ?
    Merci

  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 084
    Points
    16 084
    Par défaut
    Citation Envoyé par Matrim Voir le message
    Ce que tu dis c'est qu'il faudrait reprendre le module pour travailler sur des segments ?
    oui, c'est une idée...

    comme ton image est très géométrique, le gradient (orientation) et de la valeur (couleur) sont plus simples à estimer. En résumé ça donnerait:

    • Soit le pixel manquant est "au bout" d'un seul segment, et dans ce cas on poursuit le tracé.
    • Soit le pixel manquant est "au bout" de plusieurs segments, et dans ce cas on rejoint les segments.
    • Soit le pixel manquant n'est pas "au bout" d'un segment, et dans ce cas il prend la couleur de la zone.


    Ça demande a être peaufiné, mais c'est un début.

Discussions similaires

  1. [AJAX] Liste deroulante à partir d'un input type = 'text'
    Par Equinoxe5 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/02/2009, 09h58
  2. Réponses: 3
    Dernier message: 15/11/2008, 11h30
  3. [VB6] Recuperer une fenêtre à partir d'un hwnd ( type long)
    Par Oui-Oui MB dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/01/2006, 12h01
  4. création d'une carte avec navigation du type mappy
    Par BernardT dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 30/10/2005, 01h24
  5. [Système] navigation sur carte du type mappy
    Par BernardT dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2005, 09h39

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