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 :

Loader plusieurs fichiers .mat et afficher images


Sujet :

MATLAB

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut Loader plusieurs fichiers .mat et afficher images
    Salut !

    Je commence juste à utiliser Matlab et j'ai quelques soucis :

    Je voudrais loader plusieurs fichiers .mat qui sont formés comme suit :
    NEW00029: [240x320 double]
    NEW00029_DateTime: [2007 1 9 15 0 39 439]
    NEW00029_ObjectParam: [1 2 293.1500 293.1500 0.5000 0.9914 0 0 293.1000 1]
    NEW00029_Scaling: [1x9 double]
    NEW00029_FrameInfo: [9 0]
    Et donc je souhaiterais pour chaque .mat file (NEW00021 à NEW00029) afficher l'image c'est a dire pour ce fichier NEW00029.mat l'image NEW00029.
    Donc je procède comme suit:
    imageNums=21:29;
    for iFile = 1:length(imageNums) img=load([ltCleanDirectoryName('D:\NEW000'),num2str(imageNums(iFile)),'.mat'])
    %imagesc ??? mais ici que faire? pour afficher il faudrait faire img.NEW00029, ou img.NEW00021 etc... que puis-je faire?
    end

    Merci d'avance pour votre aide
    Sophie

  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 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 : 52 882
    Points
    52 882
    Par défaut
    Bonjour,

    tout d'abord, je tiens à dire (et redire) que le fait de multiplier le nombre de variable du type A1,A2,A3,A... est une mauvaise pratique avec Matlab.

    A lire :
    http://www.developpez.net/forums/sho...d.php?t=264608

    Dans le cas précis qui nous intéresse ici, il serait judicieux d'utiliser un tableau de structures.

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for n=1:10
    s(n).a=rand;
    s(n).b=rand(5);
    end
     
    save data s
    Si vraiment, la structure précédement décrite ne peut pas être modifiée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    NEW00029=rand(240,320);
    save NEW00029 NEW00029
     
    for n=29:29
    fname=sprintf('NEW%05d.mat',n);
    s=load(fname);
    im=getfield(s,fname(1:end-4));
    imagesc(im);
    end

    Je le répète (encore et encore...), évitez de créer des variables (et des fichiers) de type A1,A2,A3,A...
    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)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Merci infiniment pour l'aide. En fait j'aurais jamais fait cette structure moi Ce sont des fichiers qui viennent d'un logiciel d'acquisition d'images thermales donc je ne peux pas les changer.

    Juste une petite question encore: j'ai donc fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for iFile = 21:29
        fname = sprintf('NEW%05d.mat',iFile);
        s = load([sourceDir,fname])
        im = getfield(s,fname(1:end-4));
        imagesc(im);
    end
    et au final je n'ai qu'une image d'ouverte, je suppose que c'est parce qu'elles se sont toutes ouvertes simultanément dans la meme fenetre non?

    Merci encore

  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 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 : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par soeursourire
    je suppose que c'est parce qu'elles se sont toutes ouvertes simultanément dans la meme fenetre non?
    Oui ! Il suffit d'appeler la fonction FIGURE avant chaque création d'image.


    Je précise que la fonction FULLFILE est très utile ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for iFile = 21:29
        fname = sprintf('NEW%05d.mat',iFile);
        s = load(fullfile(sourceDir,fname))
        im = getfield(s,fname(1:end-4));
        figure('name',fname(1:end-4));
        imagesc(im);
    end
    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)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup!
    Y-a-t-il un avantage pour utiliser fullfile(sourceDir,fname) au lieu de [sourceDir,fname] ?
    A+

  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 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 : 52 882
    Points
    52 882
    Par défaut
    Bonjour,

    la documentation dit :

    FULLFILE(D1,D2, ... ,FILE) builds a full file name from the
    directories D1,D2, etc and filename FILE specified. This is
    conceptually equivalent to

    F = [D1 filesep D2 filesep ... filesep FILE]

    except that care is taken to handle the cases where the directory
    parts D1, D2, etc. may begin or end in a filesep. Specify FILE = ''
    to build a pathname from parts.
    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)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    oki merci beaucoup.
    Une autre petite question...
    J'ai une image (im) donc qui a des valeurs comprises entre 295.0499 et 309.0054 et je voudrais sauver cette image dans un repertoire avec imwrite.. mais pour cela je suis apparemment obligée de rescaler mon image. J'ai essayé de faire ca:
    imRGB = ind2rgb(im,'jet')
    mais alors mon image sauvée est blanche, qu'est ce que je fais de mal? Que represente le 2eme argument 'map' de cette fonction?
    Auriez vous une autre idée pour que je scale mon image afin que mes valeurs soient comprises entre 0 et 255, pour obtenir une image en couleur sauvegardée?
    Merci d'avance

  8. #8
    Membre habitué Avatar de larimoise
    Inscrit en
    Octobre 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 220
    Points : 197
    Points
    197
    Par défaut
    Salut,

    voici une fonction qui permet de recaler les valeurs entre 0 et 255, tu peux trouver beaucoup de fonctions dans File Exchange de Matlab, on peut y accéder par le Help de Matlab (Web Resources):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function B= grayscale(A)
    % B = grayscale(A)
    %
    % converti la matrice A en une matrice avec des niveaux de gris de 0..255
    % Permet l'écriture facile des fichiers sur le disque
     
    % Auteur : Julien Kronegg (Julien.Kronegg @ cui.unige.ch)
    % Date   : 12 avril 2002
    minimum = min(A(:));
    maximum = max(A(:));
    B=uint8(255*(A-minimum)/(maximum-minimum));
    A+
    MATLAB Version 7.13.0.564 (R2011b)
    Microsoft Visual studio 2010
    LabView 2013 service pack1

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 453
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup pour l'aide..
    Par contre si je veux garder une image couleur, quelle scale je devrais utiliser? Parce que si j'utilise directement imwrite j'obtiens une image blanche..

Discussions similaires

  1. [Débutant] Importation de plusieurs fichiers .mat avec choix de la colonne
    Par Vincent32 dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/11/2012, 10h06
  2. [Débutant] Calcul sur plusieurs fichiers MAT
    Par colocolo dans le forum MATLAB
    Réponses: 25
    Dernier message: 03/03/2009, 23h45
  3. Afficher plusieurs rectangles sur la même image
    Par hello05 dans le forum Images
    Réponses: 5
    Dernier message: 15/04/2008, 12h48
  4. Réponses: 1
    Dernier message: 01/06/2006, 09h11
  5. [Image] Afficher image récupérée par FTP sans fichier temporaire
    Par grinder59 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 18/05/2006, 09h17

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