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

MATLAB Discussion :

Détection de points [Débutant]


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut Détection de points
    Bonjour,

    Je continue mon périple avec vous afin que vous me donniez si possible quelques idées sur un problème que j'ai à résoudre. Je dois détecter ce qu'on appelle des "reflux" ce qui se traduit par des avances ou retards sur un vecteur. Bon, je ne suis pas au point en ce qui concerne cette notion pour le moment, mais voici par exemple un cas où vous pourriez m'aider.

    On se donne ces deux vecteurs V1 et V2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    V12=[316 317 318 400 401 511];
    V23=[319 320 399 400 566];
    Je dois détecter à chaque fois que V12 est en avance sur V23 au sens des événements, problème dont j'avais déjà parlé dans un autre sujet. On appelle événements toute série de points séparés d'un écart de 1. J'ai déjà une fonction qui me donne les événements, leur début et fin ainsi que durée, ce qui donnerait ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ev12=
     
    316 318 3
    400 401 2
    511 511 1
     
    ev23=
     
    319 320 2
    399 400 2
    566 566 1
    L'idée c'est que je dois détecter les événements dans l'ordre d'apparition, ce qui est le cas sur ev12 et ev23. De plus, je dois voir quand V12 est en avance sur V23 toujours dans l'ordre : par exemple ici le premier événement de 12 commence avant celui de 23 tandis que le second (400 401) commence après celui de 23 (399 400). Et ainsi de suite. Bref, je ne sais pas si je suis clair : en gros je regarde les événements dans l'ordre deux à deux et je dois voir le nombre de fois où 12 est en avance sur 23 : ici c'est donc en 2 occurrences : événement 1 et 3.

    Voilà, je cherche donc à donner ce nombre d’occurrence, sachant que les vecteurs n'ont pas nécessairement même taille.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Finalement j'ai trouvé une solution mais je pense que cela n'intéressera personne que je la détaille ici.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par abel413 Voir le message
    je pense que cela n'intéressera personne que je la détaille ici.
    Si justement !
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    En fait, je ne sais pas trop comment présenter ma réponse qui n'est peut-être pas optimale. En gros, j'avais mal posé mon problème car j'ai répondu à d'autres questions par la suite car je me suis intéressé à non pas 2 vecteurs mais 3 (puis j'ai à faire le même travail avec 4,5 et 6 vecteurs).

    Donc par exemple pour trois vecteurs, je détermine les intersections suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    inter_Imp12_liquide=intersect(valeurs_Imp1_liquide,valeurs_Imp2_liquide);
    inter_Imp23_liquide=intersect(valeurs_Imp2_liquide,valeurs_Imp3_liquide);
     
    inter_Imp123_liquide=intersect(inter_Imp12_liquide,inter_Imp23_liquide);
    Ensuite j'ai une fonction deb_fin.m qui calcule les fameux événements et que j'applique à ce dernier vecteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    evenements_inter_Im123_liquide=deb_fin(inter_Imp123_liquide);
    Avec la fonction deb_fin que je viens justement de recorriger grâce à Dut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function R=deb_fin(valeurs_Imp1_liquide)
    LL=diff(valeurs_Imp1_liquide);
    L3=find(LL>1);
    fin=valeurs_Imp1_liquide(L3); 
    fin(numel(L3)+1)=valeurs_Imp1_liquide(end);
    debut(2:numel(L3)+1)=valeurs_Imp1_liquide(L3+1);
    debut(1)=valeurs_Imp1_liquide(1);
    debut;
    fin;
    R = [debut(:) fin(:) (fin(:)-debut(:))+1];
    A=0;
    Enfin, je détermine les reflux de ces trois pistes en cherchant les événements communs tels que 3 est en avance sur 2 et 2 en avance lui-même sur 1 :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    function [Dref, Fref]=reflux_3(evenements_inter_Im123_liquide,evenements_Imp1_liquide,evenements_Imp2_liquide,evenements_Imp3_liquide)
    nbreflux=0;
    for i=1:size(evenements_inter_Im123_liquide,1)
     
        %Pour déterminer les reflux entre trois pistes, on procède comme suite
        %: on a déterminé dans etude_de_courbe les événements commun à 3
        %pistes par domaine. On cherche alors, dans un domaine donné et selon 
        %la piste l'ensemble des événements communs aux trois pistes i.e. leur
        %début et fin que l'on stocke dans les DDI et FFI. Il n'y a alors
        %reflix que si le début d'un événement commun sur la piste 3 est avant
        %2 lui-même avant 1 ce qui se traduit physiquement par une 
        %"montée" depuis 3 vers 1.
     
        X1=find(evenements_Imp1_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D1=X1(end);
        DD1=evenements_Imp1_liquide(D1,1);
        FF1=evenements_Imp1_liquide(D1,2);
        X2=find(evenements_Imp2_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D2=X2(end);
        DD2=evenements_Imp2_liquide(D2,1);
        FF2=evenements_Imp2_liquide(D2,2);
        X3=find(evenements_Imp3_liquide(:,1)<= evenements_inter_Im123_liquide(i,1));
        D3=X3(end);
        DD3=evenements_Imp3_liquide(D3,1);
        FF3=evenements_Imp3_liquide(D3,2);
        if((DD3>=DD2) & (DD2>=DD1))
            nbreflux=nbreflux+1;
        Dref(nbreflux,1)=DD1;
        Dref(nbreflux,2)=DD2;
        Dref(nbreflux,3)=DD3;
        Fref(nbreflux,1)=FF1;
        Fref(nbreflux,2)=FF2;
        Fref(nbreflux,3)=FF3;
        end
     
        clear X1 D1 DD1 FF1 D2 DD2 FF2 X3 D3 DD3 FF3
    end
    Dref;
    Fref;
    Bref, j'ai du mal à expliquer hors du contexte qui est le mien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/11/2016, 16h21
  2. Détection de points d'intérêts 1D
    Par sonaa dans le forum Signal
    Réponses: 3
    Dernier message: 28/05/2012, 13h28
  3. Détection des points d'intérêt dans une séquence vidéo
    Par miss_angel dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 15/12/2011, 13h52
  4. Détection de points dominant sur un contour
    Par SAKDOSS dans le forum Images
    Réponses: 1
    Dernier message: 01/11/2010, 13h57
  5. Détection de points d'intersection
    Par Garsouille dans le forum OpenCV
    Réponses: 1
    Dernier message: 24/07/2007, 22h50

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