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 :

Courbes bruitées et leur moyenne


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut Courbes bruitées et leur moyenne
    Bonjour,

    Desole pour le titre, je n'arrivais pas a en trouver un qui decrive bien mon probleme.

    J'ai des courbes qui en principe ressemblent aux deux courbes ci-dessous :
    Nom : Courbe_clean.png
Affichages : 135
Taille : 2,7 Ko
    Nom : Courbe_clean_2.png
Affichages : 209
Taille : 1,9 Ko

    La droite est la moyenne des points de la courbe.
    Mon but est de trouver les ordonees des points p1 et p2 pour lesquels "tous" les points entre p1 et p2 se trouvent au dessus de la moyenne.
    Dans le cas ideal pas de probleme. Mais parfois, mes courbes sont bruitees comme les deux courbes ci-dessous :
    Nom : Courbe_central.png
Affichages : 131
Taille : 3,2 Ko
    Nom : Courbe_lateral.png
Affichages : 141
Taille : 2,2 Ko

    Dans le premier cas, je veux "oublier" la partie centrale de la courbe qui repasse sous la moyenne.
    Dans le second cas, ne pas considerer les pics a droite et a gauche.

    Cela fait un moment que je cherche, mais je ne trouve pas d'algorithme simple pour regler ce probleme qui pourtant ne me parait pas bien complexe.

    Merci par avance de votre aide.

    [edit]
    J'ai clarifie un peu le probleme et mis a jours les figures.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Balaie de gauche à droite. 
    Si le sens de variation est toujours le même, c'est que tu n'as pas un extrémum. 
    Sinon, tu notes la valeur de l'ordonnée.
    En quoi cette méthode ne résout pas ton problème?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Merci de la reponse.
    J'avais mal pose ma problematique. Je ne cherche pas les maximum, mais les points p1 et p2 (que je viens d'ajouter).
    Desole, mais avec les drogues anti-douleur, mon cerveau a un peu du mal ces jours-ci.

  4. #4
    Membre actif

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Points : 207
    Points
    207
    Par défaut
    La recherche ne doit pas porter sur des extrema, mais sur les deux plus grands maximums locaux au-dessus de la moyenne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    maximum1=maximum2=0
    en balayant de gauche à droite
    si valeur_preprécédente <= valeur_précédente et valeur_courante <= valeur_précédente et valeur_précédente > moyenne 
           //la courbe est un maximum local au-dessus de la moyenne
           si valeur_courante > min(maximum1,maximum2) //valeur_courante doit remplacer le minimum des deux
                si maximum1 < maximum2
                      maximum1=valeur_précédente
                sinon
                      maximum2=valeur_précédente
    EDIT: modification de commentaire
    Toujours à adapter le problème à la structure de la machine, mais se soigne pour faire l'inverse.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Merci,

    Je dois vraiment etre a l'ouest dans mes explications.

    Mon but est de trouver les points p1 et p2.
    Tous les points compris entre p1 et p2 doivent etre au dessus de la moyenne.
    Il peut arriver que des faux couples de p1 et p2 existent comme sur la derniere figure. C'est du bruit et ils doivent etre ignores.
    De meme, du bruit peut faire passer un ou deux points entre p1 et p2 en dessous de la moyenne et il faut ignorer ca.

    J'espere etre plus clair.

  6. #6
    Membre actif

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Points : 207
    Points
    207
    Par défaut
    Je pars de hypothèses suivantes:
    - on ne doit pas tenir compte des intersections de moyenne "autour" d'un minimum de valeur supérieure à bandebruit
    - p1 est une intersection "montante", p2 est une intersection non montante
    - on recherche les p1 et p2, intersections consécutives montante puis descendante qui maximisent p2-p1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fonction EST_MINIMUM (val_cour, val_pre, val_pre_pre)
      retourne (val_pre_pre >= val_pre ET val_cour >= val_pre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Première partie :identifie les p1 et p2 potentiels (élimine implicitement les intersections entourant un minimum de valeur > bandebruit
    
    montant=false
    i=0
    flag=0
    val_cour=val_pre=val_pre_pre=0
    
    Tant que (lire(val_cour) != fin de fichier)
         si (val_cour == moyenne)
             si flag==0 // l'intersection ne succède pas à un minimum à oublier
                  pile_intersections[i++]=val_cour
                  pile_sens[i++]=(val_cour >=val_pre)
             sinon
                 flag=0 //l'intersection succède à minimum à oublier, on ne tient donc pas compte de l'intersection en cours
          si (EST_MINIMUM(val_cour, val_pre, val_pre_pre ET val_cour > bandebruit)
                 décrémenter i //on oublie l'intersection précédente
                 flag=1
          val_pre_pre=val_pre
          val_pre=val_cour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         
    Deuxième partie : identifier p1 montant et p2 descendant qui maximiset p2-p1
    p1=p2=max=0
    
    pour j=0; j< i-1; j++
       si ( pile_intersections[j+1] - pile_intersections[j] > max ET pile_sens[j+1]==false ET pile_sens[j] ==true)
          max = pile_intersections[j+1] - pile_intersections[j]
          p1=pile_intersections[j]
          p2=pile_intersections[j+1]
    Je pense que cela correspond mieux. Au plaisir!
    Bien à toi.

    EDIT : pile_sens au lieu de pile_intersections dans la seconde partie de la ligne 6 (dernier block code)
    Toujours à adapter le problème à la structure de la machine, mais se soigne pour faire l'inverse.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Merci pour ton aide.

    Je teste ca et je te dis si cela me donne de bon resultat.
    Mais cela me semble prometteur.

  8. #8
    Membre actif

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par isangoma Voir le message
    Merci pour ton aide.

    Je teste ca et je te dis si cela me donne de bon resultat.
    Mais cela me semble prometteur.
    A la ligne 15 du 2è bloc, il faut ajouter la condition val_cour < moyenne parce que sinon, on oublie les intersections montantes suivant un minimum local > moyenne, qui suit un maximum local.

    Or ne doit oublier un minimum local que si bandebruit<minimum local<moyenne.
    Toujours à adapter le problème à la structure de la machine, mais se soigne pour faire l'inverse.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Les premiers resulat semble bon.
    Mais je pourrais confirmer une fois que j'aurais trouver pourquoi p2 semble toujours un ou deux crans trop a gauche et ainsi faire tous les tests possibles.

  10. #10
    Membre actif

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par isangoma Voir le message
    Les premiers resulat semble bon.
    Mais je pourrais confirmer une fois que j'aurais trouver pourquoi p2 semble toujours un ou deux crans trop a gauche et ainsi faire tous les tests possibles.
    Il y a une énorme erreur ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                pile_intersections[i++]=val_cour
                pile_sens[i++]=(val_cour >=val_pre
    -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                pile_intersections[i]=val_cour
                pile_sens[i]=(val_cour >=val_pre)
                incrémenter i
    Toujours à adapter le problème à la structure de la machine, mais se soigne pour faire l'inverse.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2011
    Messages : 147
    Points : 180
    Points
    180
    Par défaut
    Bon alors les tests sont plus ou moins fini.

    Dans 95% des images (les courbes viennent d'image en niveau de gris) cela fonctionne.
    Mais sur quelques images, le bruit est trop important et passe pour du signal legitime.

    Je vais donc continuer a reflechir a mon probleme.

    Merci pour l'aide en tous cas.

Discussions similaires

  1. Pour en finir avec ces courbes bruitées
    Par thomMonteillet dans le forum MATLAB
    Réponses: 25
    Dernier message: 30/09/2012, 20h06
  2. [JFreeChart] Moving average / Courbe moyenne
    Par SebastianPx dans le forum 2D
    Réponses: 0
    Dernier message: 15/04/2009, 14h02
  3. courbes moyennes en fonction de plusieurs points sur un graphique
    Par jeanGuignol dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 26/09/2008, 08h51
  4. Simuler un bruit sur une courbe
    Par mimil18 dans le forum C++
    Réponses: 3
    Dernier message: 16/05/2007, 15h36
  5. Filtrer des courbes (bruit)
    Par babounlehobbit dans le forum Signal
    Réponses: 9
    Dernier message: 21/03/2007, 00h01

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