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 :

Comment lire un fichier et extraire des données


Sujet :

MATLAB

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Par défaut Comment lire un fichier et extraire des données
    Bonjour,

    j'ai un fichier texte avec plein de coordonnées representant des champs de vecteurs. (champs vecteurs d'une image fixe)
    J'utilise ainsi quiver pour representer UN vecteur.
    Mais je veux representer TOUT les vecteurs.

    (un vecteur = une petite partie de l'image / tout les blocs = image entiere).
    Mon fichier txt où se trouve les coordonnées de chaque vecteur sont disposés de la manière suivante :

    (-35,-6,-35,-6)(-35,-6,-35,-6(-26,-5,-26,-5)(-26,-5,-26,-5)(-26,-5,-26,-5)(-26,-5,-26,-5)(-31,-5,-31,-5)(-31,-5,-31,-5)(-31,-5,-31,-5) etc..
    j'aimerais déjà pour commencer, faire un quiver du premier vecteur, puis le second etc...
    tout en ne les ecrasant pas.


    A la fin, cela devra resembler en gros, à cela :







    Vu que je débute en MATLAB (version 7), je ne vois pas du tout comment faire, même après, chercher sur google et forums.
    Pourriez vous m'aider?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Voici pour lire le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fid=fopen('data.txt','rt');
     
       X=fscanf(fid,'(%d,%d,%d,%d)',[4,inf]);
     
    fclose(fid);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Par défaut merci
    Merci grand chef.
    J'ai testé et cela fonctionne. Mais pour lire par exemple la colonne 5, comment je fais?
    En fait, mon but étant maintenant de faire des quiver à chaque colonne de X (si je reprends les variables que tu as utilisées).
    Dans mon fichier texte, decrivant les vecteurs de mouvement d'une image de taille 352*288, il y a 101 376 coordonnées.
    J'ai donc 101 376 quiver à faire.

    J'ai pensé à cette commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quiver(X(1,:),X(2,:),X(3,:),X(4,:))
    Est-ce correct?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par salut93
    Est-ce correct?
    Euh... c'est à toi de nous dire, non ?

    Le problème, c'est que je ne vois pas exactement à quoi correspondent les données du fichier ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Par défaut
    Justement j'ai testé mais je ne sais si les champs vecteurs sont bien placés.
    Mon fichier texte contient en fait 101 376 vecteurs correspondants aux vecteurs de mouvements (estimation de mouvement) d'une trame extraite d'une vidéo de taille 352*288.

    Voici le resultat obtenu :

    (ce que je ne comprends pas, c'est que je devrais pas obtenir une image en 352*288 ?)


  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Peux-tu expliquer ce que représente chacun de ces nombres :
    (-35,-6,-35,-6)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Par défaut
    Dans le code (je ne pense que cela ne va tapporter grands choses) :

    (m_plbMV[mix][miy].mv_x,
    m_plbMV[mix][miy].mv_y,
    m_prbMV[mix][miy].mv_x,
    m_prbMV[mix][miy].mv_y)


    m comme motion
    p comme prediction
    l comme left
    r comme right
    MV comme Motion Vector

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Pour tracer une flèche en 2D, il faut 4 informations :

    [x,y] point de départ et [x,y] point d'arriver
    ou
    [x,y] point de départ et [u,v] composantes du vecteur

    On se trouve dans quel cas avec tes données ?

    Ou bien j'ai raté quelque chose d'évident

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Par défaut
    Salut,
    désolé pour le retard.
    Donc, mon fichier texte contient 101 376 vecteurs (correspondant aux pixels de ma vidéo 352*288).
    Donc chaque vecteur est en effet, représenté sous la forme suivante : (x1,y1,x2,y2).

    x1,y1 : coordonnées du point de départ
    x2,y2 : coordonnées du point d'arrivée


    Donc, je devrais obtenir 101 376 vecteurs (certains seront évidemment nuls, car sur la vidéo, les vecteurs representent le mouvement).
    Mais lorsque que j'essaie d'afficher ces vecteurs de mouvements, avec la commande suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fid=fopen('monfichier.txt','rt');
    X=fscanf(fid,'(%d,%d,%d,%d)',[4,inf]);
    fclose(fid);
    quiver(X(1,:),X(2,:),X(3,:),X(4,:))

    Je n'obtiens pas une image graphique (via le quiver) de taille 352*288...
    Je sais que j'ai loupé quelque chose, pourriez-vous m'indiquer cela?
    Merci d'avance.




    Edit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quiver(X(1,1),X(2,1),X(3,1),X(4,1))
    Ce code me permet de representer le premier vecteur de mon tout premier pixel.
    Je veux le faire pour les autres pixels, et les disposés en 352*288...Je ne sais pas si le problème est plus clair.

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par salut93
    x1,y1 : coordonnées du point de départ
    x2,y2 : coordonnées du point d'arrivée
    Mais les paramètres passés à QUIVER doivent être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quiver(x1,y1,x2-x1,y2-y1,...)

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Par défaut
    Oui je pense que de toute façon, mon fichier texte contient les bonnes coordonnées pour le quiver.
    Supposons qu'ils soient bons, par rapport à mon édit plus haut, comment pourrais-je faire?

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Citation Envoyé par salut93
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quiver(X(1,1),X(2,1),X(3,1),X(4,1))
    Ce ne serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quiver(X(1,:),X(2,:),X(3,:)-X(1,:),X(4,:)-X(2,:))

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> quiver(X(1,:),X(2,:),X(3,:)-X(1,:),X(4,:)-X(2,:))
    >> quiver(X(1,:),X(2,:),X(3,:),X(4,:))

    Ces deux lignes de code me donnent le même graphe, qui ne convient pas à ce que je recherche.

    Si par exemple, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Z=[1 2 3 4;3 4 5 6;5 6 7 8; 7 8 9 10]
    Z =

    1 2 3 4
    3 4 5 6
    5 6 7 8
    7 8 9 10

    Je veux représenter ces vecteurs sur un graphe 2x2.
    La première colonne correspond à mon premier vecteur, que je veux représenté sur le graphe en 2x2.
    La deuxième colonne correspond à mon deuxième vecteur, etc....
    Je devrais obtenir à la fin 4 vecteurs, représentés sur le même graphe, graphe de taille 2x2.
    Je pense qu'il faut utiliser une boucle mais aussi meshgrid je suis pas sûr (je débute...)

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Z=[1 2 3 4;3 4 5 6;5 6 7 8; 7 8 9 10]
     
    [x,y]=meshgrid(1:2);
     
    quiver(x(:),y(:),Z(3,:)-Z(1,:),Z(4,:)-Z(2,:),0)

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 22
    Par défaut
    Cela me donne une erreur...:


    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
     Z=[1 2 3 4;3 4 5 6;5 6 7 8; 7 8 9 10]
     
    [x,y]=meshgrid(1:2);
     
    quiver(x(:),y(:),Z(3,:)-Z(1,:),Z(4,:)-Z(2,:),0)
     
    Z =
     
         1     2     3     4
         3     4     5     6
         5     6     7     8
         7     8     9    10
     
    ??? Error using ==> plus
    Matrix dimensions must agree.
     
    Error in ==> specgraph.quivergroup.schema>LdoDirtyAction at 235
      refresh(h);
     
    Warning: Error occurred while evaluating listener callback.

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/11/2009, 18h12
  2. lire un fichier texte et extraire des données
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/05/2009, 13h40
  3. Réponses: 8
    Dernier message: 31/10/2007, 09h10
  4. [SQLserver2000] Lire un fichier pour importer des données
    Par cladsam dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 01/10/2007, 10h40
  5. Réponses: 2
    Dernier message: 20/10/2006, 10h49

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