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 :

Détection de contours et approximation


Sujet :

Traitement d'images

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut Détection de contours et approximation
    Bonjour,

    je désire détecter la zone foncée en bas de mon image. Cette zone peut avoir un contour supérieur bombé. Et c'est cette forme de contour que j'aimerai caractériser.
    Vous trouverez 2 images qui montrent des zones présentant une surface bombée et une image avec une surface plane.

    Je pense que pour isoler cette zone en bas, un seuillage quelconque suffit. Mais ensuite, comment caractériser la courbe représentant le contour supérieur?
    Je pensais peut être à une régression quadratique et ensuite analyser le coefficient du second ordre pour évaluer la bosse de la surface. Mais je vous avouerai que j'ai beaucoup de mal à implémenter en C++ une forme de régression!
    L'idéal serait d'avoir une fonction qui prend en entrée une liste de point et qui rend les coefficients de la courbe calculée...

    Après peut être qu'il y a plus simple comme raisonnement, je ne sais pas. Mais je suis ouvert à toute suggestion.
    Merci de votre aide.

  2. #2
    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,

    pour la détection, effectivement un simple seuillage suffit.

    Pour la caractérisation, pourquoi ne pas étudier la courbure ?
    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.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Bonjour,

    pour la détection, effectivement un simple seuillage suffit.

    Pour la caractérisation, pourquoi ne pas étudier la courbure ?
    Euh oui c'est ce que je veux faire. Mais je ne sais pas comment m'y prendre. Je vois comment avoir une liste de points caractérisant le contour de cette zone, mais après que dois-je faire?

    Vous voulez dire que je dois approximer cette liste de point par une courbe (du second ordre par exemple) et ensuite étudier le coefficient du second degré non?

    Si c'est cela, mon problème est plus dans l'implémentation. J'ai du mal à coder cette partie en C/C++. Il me faudrait des exemples de codes...

    Et s'il y a plus simple je suis preneur!! :-p

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Algérie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Points : 73
    Points
    73
    Par défaut Pourquoi?
    bonjour et surtout bon courage pour ton job qui semble très intéressant!!
    Voila si je peux me permettre, j'ai déjà travaillé sur la segmentation d'images (qui inclut la détection de zone et/ou de contours). Et à voir ton problème une question me vient à l'esprit, Pourquoi ne pas utiliser les heuristiques ou même méta-heuristiques pour résoudre ton problème c'est beaucoup plus adapté et efficace (et en plus, plus faciles à mettre en œuvre)?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par buxus Voir le message
    bonjour et surtout bon courage pour ton job qui semble très intéressant!!
    Voila si je peux me permettre, j'ai déjà travaillé sur la segmentation d'images (qui inclut la détection de zone et/ou de contours). Et à voir ton problème une question me vient à l'esprit, Pourquoi ne pas utiliser les heuristiques ou même méta-heuristiques pour résoudre ton problème c'est beaucoup plus adapté et efficace (et en plus, plus faciles à mettre en œuvre)?
    Bonjour,

    merci pour votre réponse mais peux tu m'en dire un peu plus sur ces heuristiques. Je ne connais pas du tout. Et même avec la définition de Wikipedia j'ai encore du mal... :-p
    "on implémente l'algorithme approximatif et on évalue la qualité de ses solutions par-rapport aux solutions optimales (ou aux meilleures solutions connues). Ceci passe par la mise en place d'un banc d'essai".

    Aurais tu un bout de code ou une explication plus précise à me proposer?
    Merci

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

    je ne suis pas un spécialiste de caractérisation par la courbure... mais en général il vaut mieux faire une approximation par une spline et ensuite appliquer les formules de courbure.

    Sinon tu pourrais peut être appliquer une caractérisation par descripteurs de fourier par rapport au centre de gravité, cela donnera des résultats équivalents dans ton cas.
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Bonjour,

    je ne suis pas un spécialiste de caractérisation par la courbure... mais en général il vaut mieux faire une approximation par une spline et ensuite appliquer les formules de courbure.

    Sinon tu pourrais peut être appliquer une caractérisation par descripteurs de fourier par rapport au centre de gravité, cela donnera des résultats équivalents dans ton cas.
    Alors si j'ai bien compris:
    Je seuille mon image pour n'obtenir que la zone foncée.
    Je calcule le centre de gravité de cette zone et le contour de ma forme.
    Puis je définis la courbe représentant la distance de chacun de mes points du contour au centre de gravité.
    Soit le centre de gravité le centre de mon repère.
    Je peux alors obtenir un signal de la forme C(t) = X(t)+iY(t).
    *(X(t),Y(t)) représentent les coordonnées des points du contour dans l'image
    * t est un paramètre donnant la position sur la courbe.

    Je calcule la transformée de Fourier de ce signal et j'obtiens les différents coefficients de Fourier.

    Mais après comment j'utilise ces coefficients de Fourier???
    Y a t il une phase dapprentissage pour définir des coefficients de Fourier théorique (qui correspondraient à une surface bombée)?

    Eh ben je suis pas dans la merde niveau programmation!! lol
    Mais merci quand même pour la suggestion.

  8. #8
    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
    Oups... c'est vrai que le mieux est de faire du classement par apprentissage, j'avais oublié... désolé.
    Mais pourquoi est ce faire exactement tout cela ?
    Peut être que l'on se casse la tête pour rien.

    Pour les descripteurs de Fourier, inutile de prendre tous les points comme tu as dû le lire dans certains tutoriaux.

    Est ce réellement la courbure de la partie supérieure que tu souhaites caractériser ? Car sinon, on peut peut être essayer de caractériser la forme entière.
    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.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Oups... c'est vrai que le mieux est de faire du classement par apprentissage, j'avais oublié... désolé.
    Mais pourquoi est ce faire exactement tout cela ?
    Peut être que l'on se casse la tête pour rien.

    Pour les descripteurs de Fourier, inutile de prendre tous les points comme tu as dû le lire dans certains tutoriaux.

    Est ce réellement la courbure de la partie supérieure que tu souhaites caractériser ? Car sinon, on peut peut être essayer de caractériser la forme entière.
    Ben si une méthode arrive à différencier les deux types de formes: un bloc foncé avec une surface plane et un bloc foncé avec une surface bombée, je suis preneur!! :-D

  10. #10
    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
    Je suis étonné que Toto13 n'ait pas parlé de MSGPR...

    A partir des deux courbes X(t) et Y(t) on doit pouvoir construire la courbe Theta(t) de l'angle de la tangente et l'étudier sur l'intervalle [t0,t1] qui représente le "haut" de la forme.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Je suis étonné que Toto13 n'ait pas parlé de MSGPR...

    A partir des deux courbes X(t) et Y(t) on doit pouvoir construire la courbe Theta(t) de l'angle de la tangente et l'étudier sur l'intervalle [t0,t1] qui représente le "haut" de la forme.
    J'ai pas tout saisi. L'angle de la tangente...
    Pour chaque point de ma courbe, je connais x et y ou alors r et theta dans le repère formé par le centre de gravité et l'axe horizontal et vertical.
    Mais en quoi cela peut il caractériser une surface bombée ou une surface plane?

  12. #12
    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 picsou42 Voir le message
    J'ai pas tout saisi. L'angle de la tangente...
    Pour chaque point de ma courbe, je connais x et y ou alors r et theta dans le repère formé par le centre de gravité et l'axe horizontal et vertical.
    Mais en quoi cela peut il caractériser une surface bombée ou une surface plane?
    AngleTgt(t) = Atan( dY(t) / dX(t) )

    Si ta surface est plane, ta courbe est une droite => l'angle de la tangente est constant.


    Tu peux également calculer la "courbure" de ta courbe en chaque point:

    K(t) = (X'(t).Y"(t) - X"(t).Y'(t)) / (X'(t)^2 + Y'(t)^2)^1.5

    avec X'(t) = dX(t)/dt et X"(t)=d²X(t)/dt²
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    AngleTgt(t) = Atan( dY(t) / dX(t) )

    Si ta surface est plane, ta courbe est une droite => l'angle de la tangente est constant.


    Tu peux également calculer la "courbure" de ta courbe en chaque point:

    K(t) = (X'(t).Y"(t) - X"(t).Y'(t)) / (X'(t)^2 + Y'(t)^2)^1.5

    avec X'(t) = dX(t)/dt et X"(t)=d²X(t)/dt²
    ok je vois...
    Mais par contre, étant donné que tout ce que je possède est une liste de points (une trentaine) comment est ce que j'approche les calculs de dérivée et de dérivée seconde?

    AngleTgt(t = t0) = Atan( dY(t) / dX(t) ) t=t0 = Atan(Y(t0+1) - Y(t0-1))/(X(t0+1)-X(t0-1))) ???
    et pour la dérivée seconde que faut il faire?

  14. #14
    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 picsou42 Voir le message
    ok je vois...
    Mais par contre, étant donné que tout ce que je possède est une liste de points (une trentaine) comment est ce que j'approche les calculs de dérivée et de dérivée seconde?

    AngleTgt(t = t0) = Atan( dY(t) / dX(t) ) t=t0 = Atan(Y(t0+1) - Y(t0-1))/(X(t0+1)-X(t0-1))) ???
    et pour la dérivée seconde que faut il faire?
    Ah... les fameuses formules de différentiation discrète.

    Formules à 3 points:
    • dF(x)/dt = (F(x+h)-F(x-h))/2h + O(h²)
    • d²F(x)/dt² = (F(x+h)-2F(x)+F(x-h))/h² + O(h)


    A utiliser avec h=1
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  15. #15
    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,

    oui, MSGPR... pourquoi pas.

    Mais en fait le bas des formes est toujours le même, seule la partie supérieure est différente. Donc de simple indices de forme pourront faire l'affaire.

    Mais d'un autre coté, à moins que la viscosité de ton précipité foncé soit très importante, les formes seront identiques après quelques secondes, la gravité fera son travail.
    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.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    Merci!

    Par contre je n'ai pas essayé de faire le calcul encore.
    Je voulais avoir votre avis sur les "courbes" que j'obtiens.
    Il y a deux images qui montrent la zone détectée et le centre de gravité.

    Ne trouvez vous pas que le nombre de points est insuffisant et que le calcul que vous m'avez dit de faire ne reflètera rien du tout...?

  17. #17
    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 picsou42 Voir le message
    Merci!

    Par contre je n'ai pas essayé de faire le calcul encore.
    Je voulais avoir votre avis sur les "courbes" que j'obtiens.
    Il y a deux images qui montrent la zone détectée et le centre de gravité.

    Ne trouvez vous pas que le nombre de points est insuffisant et que le calcul que vous m'avez dit de faire ne reflètera rien du tout...?
    Comme l'a dit Toto13 au post #6, une fois que tu as tes points tu peux faire un lissage et une approximation par une courbe => tu auras autant de points que tu veux.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    oui mais c'est là qu'est mon gros problème: l'approximation par une courbe...
    Je ne sais pas du tout faire!!! Et je n'ai pas réussi à trouver un exemple de code pour une approximation par courbe de Bezier, B-Spline ou autre!

  19. #19
    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 picsou42 Voir le message
    oui mais c'est là qu'est mon gros problème: l'approximation par une courbe...
    Je ne sais pas du tout faire!!! Et je n'ai pas réussi à trouver un exemple de code pour une approximation par courbe de Bezier, B-Spline ou autre!
    Spline cubique passant par "n" points : http://www.developpez.net/forums/d33...e/#post3513925
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Spline cubique passant par "n" points : http://www.developpez.net/forums/d33...e/#post3513925
    Merci beaucoup!! J'ai mis un peu de temps avant d'arriver à ce que je voulais, mais ca y est j'ai pu approximer mon contour.
    Maintenant reste à réfléchir sur la différenciation des cas... Je vais regarder du côté de cet angle et de la courbure.
    Je ne sais pas trop encore si je dois prendre l'angle max, l'angle moyen, la courbure max, la courbure moyenne... A voir

Discussions similaires

  1. Détection de contour PREWITT
    Par b_reda31 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 05/02/2008, 22h44
  2. [Débutante] Détection de contour
    Par diana82 dans le forum Images
    Réponses: 3
    Dernier message: 29/10/2007, 16h20
  3. Détection de contours sur une vidéo
    Par willem77 dans le forum OpenCV
    Réponses: 0
    Dernier message: 11/09/2007, 13h45
  4. [débutant]traitement image, détection de contour
    Par seerauber dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 13/07/2007, 15h25
  5. Détection de contour
    Par biquet dans le forum Images
    Réponses: 11
    Dernier message: 19/01/2007, 17h50

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