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

Algorithmes et structures de données Discussion :

algorithme detection de pics dans une courbe


Sujet :

Algorithmes et structures de données

  1. #1
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut algorithme detection de pics dans une courbe
    Bonjour,

    Je suis à la recherche d'un algorithme de detection de pics et d'epaulements sur une courbe type Gauss. Apres quelques recherches, j'ai trouve qu'il était possible de mettre en évidence les pics en calculant la dérivée seconde.

    J'ai donc 1 question :
    Y aurait il un autre algorithme connu pour faire ce genre de chose (si je passe a cote de qqch), et si possible ou je pourrais le trouver? Sinon si vous avez quelques liens avec l'algorithme avec la methode de la derivee seconde je suis preneur.

    En esperant etre assez clair.

    Merci d'avance pour vos reponses

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Sauf erreur de ma part, le maximum est atteint lorsque la dérivée première est constante, et donc lorsque la dérivée seconde est nulle.

    Donc la détection doit être possible avec la dérivée première.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Je viens de trouver ca :
    http://fr.wikipedia.org/wiki/D%C3%A9pouillement_d'une_courbe#Position_et_hauteur_du_pic

    Il faut regarder position et hauteur du pic. La derivee seconde est bien car elle me permettrait de detecter les epaulements eventuels. Mon probleme est que je vois bien l'equation pour une courbe de gauss, mais ne possedant que les points X et Y de ma courbe, je me demande si je dois simplement derivee la fonction de gauss (sachant que mes courbes ressemblent à une courbe de gauss, donc une approximation)? En fait je vois mal l'etape qui relie mes points à une equation de cette courbe. Bref mes souvenirs de maths remontent qq peu

  4. #4
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    ça m'étonerais que tu puisse faire un dérivée fonction...
    la dérivée numériques est assez facile à calculer, mais, il est vrai, imprécise.
    j'ai entendu dire qu'il existais une méthode pour calculer directement la dérivée xième au lieu de calculer x fois la dérivée, mais je n'en sait pas plus. Enfin dans ton cas, deux dérivées, c'est pas la mer à boire.

    salut
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    dériver à partir des points conduit à énormément de bruit.
    Si vous avez un modèle comme une gaussienne, le + facile est d'en déterminer les paramètres ( centre, hauteur, largeur) avec un moindre carré et, ensuite dériver le nombre de fois requis la fonction fittée afin de localiser max, inflexions, ...

  6. #6
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Ok, donc pour etre sur, il faut que je reussisse à faire une approximation de ma courbe par la méthode des moindres carré? (un polynome d'approximation?). Le probleme pour commencer est que je ne me rappelle plus comment faire ca, mais bon je vais rechercher (enfin si qqun peut m'aider qu'il n'hesite pas, au moins le point de depart).

    Enfin pour revenir au modele, je peux determiner un modele a partir d'une courbe, avoir sa fonction et l'utliliser pour toutes les autres courbes qui sont il est vrai assez proches mais ont tout de meme qqes differences ?

    Merci d'avance pour les reponses

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

    Théorème : par N points, il passe un polynome de degès N+1.

    Attention aux oscilations sur les bords de la courbes résultats.

    Tu peux donc faire passer une courbe polynomiale pour avoir une équation de ta gaussienne. Il suffit de résoudre le système par un pivot de Gauss.

    En revanche, si tu connais tout les points de ta courbes, un petit algo tout simple pour trouver les pics peut être imaginé.
    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.

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Théorème : par N points, il passe un polynôme de degrés N+1.
    En fait par N points, il passe un polynôme de degré N-1 !
    En ce qui concerne le moindre carré j'ai mis à disposition un code en C++ il y a 6 mois environs sous la question
    [Résolu] Méthode d'interpolation à partir dune série de valeurs
    dans ce forum ( algorithme )

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par gangsoleil
    Bonjour,

    Sauf erreur de ma part, le maximum est atteint lorsque la dérivée première est constante, et donc lorsque la dérivée seconde est nulle.

    Donc la détection doit être possible avec la dérivée première.

    tu fais erreur

    le maximum est atteint lorsque la dérivée premiere est nulle, et que la dérivée seconde est négative.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par ToTo13
    Bonjour,

    Théorème : par N points, il passe un polynome de degès N+1.

    Attention aux oscilations sur les bords de la courbes résultats.

    Tu peux donc faire passer une courbe polynomiale pour avoir une équation de ta gaussienne. Il suffit de résoudre le système par un pivot de Gauss.

    En revanche, si tu connais tout les points de ta courbes, un petit algo tout simple pour trouver les pics peut être imaginé.
    Il ne s'agit absolument pas dans ce cas d'une recherche de polynome....

    L'idée suggérée par j.p. mignot est d'utiliser la méthode des moindres carrés pour trouver la *gaussienne* qui approche le mieux la courbe.

    Tu pourras ensuite calculer le maximum à partir des parametres de la gaussienne.

    Par contre si tes courbes ne sont pas des simples gaussiennes ça ne marchera bien sur pas.

    Si tu veux utiliser un calcul basé sur les dérivée, tu peux utiliser par exemple un calcul discret de la dérivée, puis rechercher les zeros correspondant à une valeur dérivée seconde négative...
    Mais c'est vrai qu'il risque d'y avoir du bruit, il faudra probablement faire un traitement pour isoler les points obtenus.

  11. #11
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    J'avais parlé de gaussienne car l'auteur du message nous indique ce type de distribution.
    Dériver, surtout 2X les data "brut" risque fort de donner avant tout du bruit.
    Si on n'a pas de modèle sur, je ferais un lissage ( FFT, moyenne glissante, ... )

    Si la courbe est au moins symétrique, on peut ajuster par moindres carrés un décalage pour la centrer ( donc ajuste x0 pour minimiser somme[(f(x+x0)-f(-x+x0))^2]) . L’auteur semble suggérer cette symétrie puisqu’il envisage de calculer les dérivées secondes qui localisent le max si elles sont symétriques par rapport au max.
    On pourrait si on estime la largeur et l’amplitude du signal, faire un inter-corrélation avec une fonction de type Gauss et chercher le max : on se rapproche alors d’une décomposition en ondelettes.
    Cela n'est certainement pas tres precis pour localiser un max sur une distribution un peu large mais il n'y a pas de mystères.Si il y a du bruit, si on n'a pas de modèle valide, si la distribution est étalée on ne peu espérer des miracles.

  12. #12
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Merci pour vos reponses, j'ai donc essaye la solution par moindes carrés, la plupart des courbes etant symetriques, ca donne des resultats assez mitiges (surtout pour le cas de 2 pics tres proches), de plus le probleme vient de certaines courbes qui ont des comportements moins gaussiens si je puis dire. Donc voila, je crois que je vais garder mon premier algo "fait maison" base sur le calcul de pente, il me donne de meilleurs resultats. En tout cas merci, j'aurais au moins essaye une approche un peu plus mathematique.

Discussions similaires

  1. Axe des abscisses dans une courbe
    Par abdoing dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 24/08/2007, 17h16
  2. detection de forme dans une image
    Par amintek dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 15/05/2007, 13h35
  3. Detection de visages dans une image
    Par bert_ dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 19/03/2007, 21h22
  4. Marquage de pics dans une figure
    Par jena dans le forum Signal
    Réponses: 5
    Dernier message: 13/02/2007, 19h27
  5. Réponses: 5
    Dernier message: 13/07/2006, 16h05

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