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 :

Suivi d`une mouche (2)


Sujet :

MATLAB

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur industriel Biochimie
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel Biochimie

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Par défaut Suivi d`une mouche (2)
    Bonjour a tous,

    J`avais deja pose nombre de mes questions ici:
    http://www.developpez.net/forums/d15...uivi-d-mouche/

    Je reviens vers vous parce que je dois tirer de nouvelles informations de mes donnees.

    Donc pour resume ceux qui n`ont pas relu l`ancien post:
    Je connais la position de ma mouche a chaque frame, je connais les positions du labyrinthe, et je sais si la mouche est dans le bras du bas, gauche, droit ou centre.

    Je dois paufiner l`analyse maintenant....

    1) Il faudrait que je calcule la distance totale parcourue. Connaissant la position a chaque instant, je suppose que ca doit pas etre difficile, peut etre il existe une fonction?

    2) plus difficile
    La mouche change a chaque fois d`endroit mais parfois elle alterne tres rapidement entre deux zones, comme si elle ne savait pas ce decider. Il faudrait que je prenne en compte ca, et du coups je dois considere la mouche comme dans un nouvelle endroit du labyrinthe uniquement si elle y reste plus de 0.3 secondes.
    Comment integrer ca dans le code?

    Merci d`avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour à toi

    1) Pour calculer le trajet total parcouru, tu peux calculer le trajet entre chaque déplacement élémentaire. Pour se faire il te faut les coordonnées de 2 positions successives. Pour une position 2 et une position 1 données, la distance euclidienne entre ces deux positions se calcule de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqrt( (Xpos2-Xpos1)^2 + (Ypos2-Ypos1)^2);
    avec sqrt la fonction racine carré.

    Ensuite, tu dois généraliser cela pour l'ensemble de tes déplacements et faire la somme de chacune des distances.

    2) Pour faire ce que tu demandes, il te faut une information capitale. Sais-tu combien de temps s'écoule entre deux déplacements élémentaires?

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    salut

    pour le calcul de la distance entre 2 points tu peux aussi appeler la fonction norm

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur industriel Biochimie
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel Biochimie

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Par défaut
    Merci deja pour vos reponsess.

    Oui au final pour calculer la distance, c`est bete.... J`aurais du trouver seul. Je savais juste pas pour la fonction "norme"

    2) Toutes les coordonnees que j`ai sont pour chaques frames de ma video. J`enregistre a du 18 FPS (ca va surement changer, mais ca reste la meme chose).
    Donc en theorie, entre deux coordonnees il s`ecoule 1/18 seconde, soit 0.0555556 secondes.
    ( du coups faut que j`enregistre a 20fps, c`est plus simple pour les calculs.... En tout cas un fps rond)


    Par contre je suis desole, mais changement de plan, je dois d`abord affiner mon tracking avec Labview, et seulement apres je reviendrai sur Matlab. Du coups je ne vous ennuyerai pas avant la semaine prochaine je pense, Sauf si je trouve du temps pour bosser un peu sur ca le week-end.

    Mais merci pour le suivi!!!!

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur industriel Biochimie
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel Biochimie

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Par défaut
    Bonjour a tous,

    Voila j`ai pu finir ma partie Labview. Mon tracking commence a etre bien en place et de plus en plus juste ^^ je suis content et l`excel renvoye est plus propre et plus facile d`utilisation.

    J`ai egalement trouve facilement pour le calcul de la distance totale parcourue. C`etait facile j`aurai pas du poser la question (sorry for that)...

    Donc je reviens avec mon probleme, des minimums 0,3 seconde pour etre considere dans un rectangle.
    Voila tout ce a quoi j`ai pense.
    - Je dois place mon bout de code a l`endroit ou je reduis l`iteration des lettres a uniquement
    R
    C
    B
    C
    R
    - Comme j`enregistre a du 20 FPS (maintenant), la mouche doit etre au minimum 6 frames dans le meme rectangle.
    - Je suppose que je dois jouer avec du IF

    ==> A ben en vous ecrivant, je pense avoir trouve, faut juste ecrire le code maintenant ^^ pas des plus simple

    - Pour que ma lettre soit gardee dans mon tableau recapitulatif, il faut que la lettre n soit differente de la lettre n-7 mais egal a la lettre n-6. Si les deux conditions sont rempli, il inscrit la lettre dans mon tableau.

    Mais du coups, quelle fonction pour deux conditions (et que)?

    A ben au final, je me serai bien avance sur le coups, par contre pas trouve la fonction "et que".

    Si je trouve avant que j`ai une reponse, je ne manquerai pas de vous ecrire.

    Merci^^

    ps: en relisant la previsualisation, je suppose que c`est deux if, tout simplement..... je m`y attele

    EDIT 1
    J`ai poster un petit peu trop vite, j`aurais du reflechir plus longtemps ^^
    Mais les idees me sont venues quand je postais


    Voila le code, il me semble bon, qu`en pensez vous?

    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
    %% Repeat only once each letter (min 0.3sec)
     
    r=8;
    c=2;
    final(1)=position(1);
     
    while r<length(position)
        partiel = position(r);
        if partiel ~= position(r-7)
            if partiel == position(r-6)
            final(c)= partiel;
            c=c+1;
            else
            end
        else
        end
        r=r+1;
    end
    EDIT 2
    A ben decidement......

    Reste un probleme, mais je sais pourquoi....., si j`ai
    C
    C
    R
    C
    C
    C
    C
    C
    C

    Il va me mettre deux C d`affile, ceux qui etait bon avant, et comme y`a un R y`a un moment ou le C sera egal au n-6 et different du n-7

    Du coups ca m`arrange pas......
    J`ai fait d`autre test, et au final la solution serait d`ecrire
    - == aux 5 avant la lettre etudiee
    - ~= des 6 avant les 5.

    Mais la par contre je vois pas trop

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur industriel Biochimie
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel Biochimie

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Par défaut
    Apres moutle reflexion et chipotage, j`ai trouve un code qui fonctionne..... certes long et pas super beau ^^ mais fonctionnel.

    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
    40
    r=6;
    c=2;
    final(1)=position(1);
     
    while r<length(position)
        partiel = position(r);
        if partiel == position(r-1)
            if partiel == position(r-2)
                if partiel == position(r-3)
                    if partiel == position(r-4)
                        if partiel == position(r-5)
                           final(c)= partiel;
                           c=c+1;
                        else
                        end
                    else
                    end
                else
                end
            else
            end
        else
        end
        r=r+1;
    end %refaire un traitement???
    final=final';
     
    t=2;
    u=2;
    alternation(1)=final(1);
     
    while t<length(final)
        essai = final(t);
        if essai ~= final(t-1)
           alternation(u)= essai;
           u=u+1;
        else
        end
        t=t+1;
    end
    Si il existe une facon simplifie de le faire, je suis toujours preneur

    et du coups maintenant, j`ai la chose suivante.... pour differentes mouches j`ai;
    Mouche 1 : RCLCB
    Mouche 2 : RCRC
    Mouche 3 : B
    Mouche 4 : RCRCRL
    Est-il possible de regrouper le tout de la facon suivante:
    R R B R
    C C C
    L R R
    C C C
    B R
    L
    (il me recolle tout quand j`envois mais on se comprend ^^)

    Je sais comment les mettre en colonne, mais il ne veut pas les regrouper puisqu`ils n`ont pas la meme taille.......

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Bonjour,

    Tu peux éventuellement les forcer de même taille en complétant tes cases par des NaN.

    Pour tes if, tu peux regrouper les conditions en une seule ligne en utilisant l'opérateur '&'.
    En français ça donne si partiel = position(r-1) ET partiel = position(r-2) ET ... ça sera pas beaucoup plus élégant mais ça tiendra sur une ligne.

    Et sinon, je n'ai pas eu le temps de trop lire ce que tu as fait, mais tu peux également faire à la place de tes if quelques chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if partiel == position(1:6)
        final(c)= partiel;
        c=c+1;
    end

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur industriel Biochimie
    Inscrit en
    Mars 2015
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur industriel Biochimie

    Informations forums :
    Inscription : Mars 2015
    Messages : 30
    Par défaut
    Merci,

    J`ai deja un peu joue pour diminuer mon enorme boucle avec les IF mais sans resultats jusqu`a maintenant...... Mais bon faut que j`arrete de me pencher sur l`esthetique ^^ j`ai des choses bien plus importante a developper ...
    Donc une fois que tout sera fini, je reviendrai sur ce genre de probleme.

    J`ai pas non plus trouver pour forcer a regrouper tout dans un seul tableau avec les NaN, mais encore une fois esthetique...........

    Je clos ce topique du coups......

    Je rouvrirai incessamment sous peu " Suivi d`une mouche (3)"......

    Mais j`ai de moins en moins de question a poser, et je saurai surement les resoudre par moi-meme ^^ Mais si ce n`est pas le cas, je sais ou poser ma question.

    Merci Merci!

    ps: Rien a voir, quelqu`un a deja utiliser MatLab avec LabVIEW? je rencontre des sacres problemes...... (je dois encore faire des recherches, mais j`avoue que ca me rend dingue ^^)

    Petit edit

    Sorry, petite question de derniere minute......... Je viens un peu de discuter avec mon boss, il en ressort la chose suivante.
    Le code que j`utilise avec tous mes If, c`est pas mal.

    Mais en gros il voudrait garder les centres quoiqu`il arrive.

    Donc est-ce que je peux faire un code du style:

    Boucle While
    if c`est C alors tu le mets dans le tabeau
    Sinon tu regardes si la lettre correspond au meme cinqs lettres avant.
    Et si c`est vraiment pas le cas tu fais rien
    end

    En fait, je sais pas si on peut mettre une conditons dans IF et une autre dans ELSE.

    Lunch time et apres j`essayerai


    Le pro de l`EDIT

    Ok apres reflexion et essai ca fonctionne, donc la question n`est plus d`actualite.

    Merci je ne poste plus ici, je reouvrirai un 3.0. ^^

Discussions similaires

  1. [Débutant] Suivi d`une mouche (3)
    Par gerday.m dans le forum MATLAB
    Réponses: 4
    Dernier message: 07/04/2015, 10h22
  2. [Débutant] Suivi d'une mouche
    Par gerday.m dans le forum MATLAB
    Réponses: 16
    Dernier message: 18/03/2015, 11h50
  3. Réponses: 6
    Dernier message: 28/11/2013, 11h55
  4. Réponses: 3
    Dernier message: 11/06/2006, 12h09
  5. ORA-0600 suivi d'une ORA-1499
    Par apersonnat dans le forum Oracle
    Réponses: 2
    Dernier message: 17/10/2005, 09h27

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