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 :

Clustering et approximation de fonction


Sujet :

Traitement d'images

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 47
    Points
    47
    Par défaut Clustering et approximation de fonction
    Bonjour à tous et à toutes.

    Je suis confrontée à un problème dont voici grosso modo l'énoncé :

    Ce que j'ai en entrée est une image. Ce que vous voyez sur le graphique en attachment est le contour de l'objet de cette image (un peu découpé).
    Ce que je voudrais c'est calculer deux fonctions : une fonction représentant "approximativement" la courbe représentée par "les deux premiers segments de droites" (ce ne sont pas à proprement parler des segments de droite, ce sont des amas de points (avec la même abscisse souvent) qui, de loin, y ressemblent !), en partant du haut de l'image, et une seconde fonction, faisant la même chose mais pour le "segment de droite" situé tout en bas de l'image. Après, je comparerai ces fonctions.

    Ce graphique est composé des points représentants tous les pixels non nuls de mon objet (le contour que j'ai +/- bien extrait grâce à toute une série de filtres et d'opérations morphologiques).

    Ma question est la suivante : Comment obtenir ces deux fonctions ?

    Je pensais au départ, appliquer un algorithme de clustering (type kmean, k = 2) afin de splitter ce graphique en deux (les deux "segments de droite" du haut et le "segment de droite" tout en bas) et d'appliquer, sur chacun des clusters obtenus, une fonction d'approximation de fonctions pour obtenir au final deux courbes fittant au mieux les "segments de droite" situés dans chaque cluster.
    Cependant, j'ai utilisé la fonction kmean et j'obtiens un graphique divisé en 2 verticalement, tel le drapeau français...

    Je ne pense pas que mon approche soit la bonne...
    Comment feriez-vous à ma place ?

    Merci d'avance pour votre aide.
    Images attachées Images attachées  

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    C'est encore un problème de méthode et non de code matblab, donc on je déplace dans le pays de l'algorithmie.

    En première approche, je proposerai un étiquetage en composantes connexes pour différencier tout tes nuages de points.

    Après je n'ai toujours pas compris ce que tu souhaites faire :travailler sur les contours ou les squelettes de tes formes? Pourrais-tu nous montrer une image du résultat que tu souhaites?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 47
    Points
    47
    Par défaut
    Je souhaite travailler sur le contour de mes objets.
    Mes objets sont tels qu'il est difficile d'en extraire uniquement les contours, et des parasites demeurent (par exemple 3ème ligne en partant du haut).

    Cependant, mon but précis est d'obtenir deux fonctions, que je vais traiter par la suite (recherche des rayons de courbure).

    Ces deux fonctions, je veux les obtenir à partir de deux courbes distinctes, qui n'existent pas a priori sur le schéma que je vous montre. C'est pour cela que je veux m'arranger pour obtenir ces courbes via une approximation sur les nuages de points composants ce graphique.

    Seulement, je voudrais que ces deux courbes approchent le plus possible "les deux lignes du haut " (= 1 fonction) et la ligne tout en bas ( = seconde fonction). Mais pour ça, il faut que je puisse distinguer ces deux régions et c'est pourquoi j'avais pensé au clustering.

    Graphiquement parlant, il n'y aura aucune retouche à l'image. A la limite, je ne travaillerais que sur la matrice, sans générer ce graphique que ça n'aurait aucune importance. C'était juste pour vous montrer la "tête" de mes données... Je cherche simplement deux fonctions mathématiques...

  4. #4
    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
    Serait-ce trop confidentiel de nous montrer l'image de départ et, superposé dessus, les 2 courbes que tu aimerais avoir ?
    "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

  5. #5
    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 081
    Points
    16 081
    Par défaut
    Citation Envoyé par nanath02 Voir le message
    Seulement, je voudrais que ces deux courbes approchent le plus possible "les deux lignes du haut " (= 1 fonction) et la ligne tout en bas ( = seconde fonction).
    1 fonction F() composée de 2 lignes ? C'est à dire que F(x) aurait 2 valeurs ?

    Sinon, le problème ressemble à un modèle de mélange (Mixture model). Les algos de type EM semblent une bonne piste.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 97
    Points : 47
    Points
    47
    Par défaut
    souviron34 : Malheureusement oui, je ne peux pas mettre ces images en lignes ... Ce serait tellement plus simple. Mais pour imaginer : ça ressemble, dans la forme, à un saumon. Et j'aimerais avoir la fonction qui décrit la courbe de son dos, et la fonction qui décrit la courbe de son ventre.


    pseudocode :

    F_1(x) = fonction de la courbe qui fitterait au mieux (grosso modo !) les deux premiers traits du graphique

    F_2(x) = fonction de la courbe qui fitterait au mieux le dernier (tout en bas) trait du graphique


    Merci d'essayer de m'aider à résoudre mon problème

  7. #7
    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
    Alors au vu de ton dessin (et si c'est systématiquement comme ça), je ferais comme ceci :

    • primo, je scannerai l'axe Y en x = 0, pour déterminer le démarrage de la ligne marquant le milieu

    • secondo, je déterminerai grâce à ceci une ditance de sécurité (1/2 distance entre ligne d'en bas et cette ligne) (au dessus et en dessous) : YB et YH.

    • tertio, j'isolerai les points en dessous de la limite : Y < YB

    • quarto, j'solerai les points au dessus de la limite : Y > YH

    • Et là je ferais une régression linéaire (si c'est une droite que tu veux), ou toute autre fonction, sur chacun de ces 2 ensembles de points...
    "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

Discussions similaires

  1. Clustering et approximation de courbes
    Par nanath02 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 11/01/2011, 17h27
  2. approximation de la fonction sinus
    Par alix30002000 dans le forum Caml
    Réponses: 11
    Dernier message: 15/10/2007, 17h28
  3. Réponses: 8
    Dernier message: 01/10/2007, 18h18
  4. Approximation de fonction z=f(x,y) d'après un tableau de point
    Par manudcn dans le forum Mathématiques
    Réponses: 5
    Dernier message: 25/09/2007, 19h43
  5. [MySQL] Implémenter une fonction de recherche approximative
    Par Chromatic dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/02/2006, 11h54

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