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 :

[dir] réorganiser un tableau de cellule


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Points : 30
    Points
    30
    Par défaut [dir] réorganiser un tableau de cellule
    Bonjour,

    lorsque je liste tous les fichiers d'un répertoire contenant :
    casltel1.dcm
    castel2.dcm
    ...
    castel10.dcm
    castel11.dcm
    etc...
    C'est à dire des fichiers rangés dans l'ordre croissant, du premier au n-ième,

    le tableau de cellule range les données de la manière suivante :
    castel1.dcm => cellule 3
    castel10.dcm => cellule 4
    castel11.dcm => cellule 5
    ...
    castel2.dcm => cellule 14
    castel20.dcm => cellule 15
    castel21.dcm => cellule 16

    Est-il possible de garder l'ordre croissant des fichiers, correspondant à un ordre croissant de cellules?
    Sans renomer tous les fichiers au départ tel que :
    castel0001.dcm ... castel0010.dcm etc...

    En vous remerciant de votre attention.

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Une solution (il y a sans doute plus simple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    d = dir('*.dcm');
     
    {d.name}
     
    num = strread(char({d.name}).','castel%d.dcm');
    [idx,idx] = sort(num);
    d = d(idx);
     
    {d.name}

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    désolé, pour le post dans le mauvais forum.

    le problème avec :
    c'est qu'il indique seulement les fichiers présents dans notre répertoire de travail. Donc dans mon cas aucun, même si j'ai ajouté le chemin du répertoire dans mon espace de travail.

    Mon code qui marche est celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    directory_name = uigetdir
    addpath(directory_name)
    filelist = dir(directory_name);
     
    for n=3:numel(filelist)
    file1 = sprintf(filelist{n,1}.name);
    image{n} = dicomread(file1);
    end
    Maintenant avec ce code mes images ne sont pas dans l'ordre pour les traiter, à cause de filelist.

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Rien ne t'empêche de mixer les deux codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    directory_name = uigetdir;
     
    d = dir(fullfile(directory_name,'*.dcm'));
     
    %{d.name}
     
    num = strread(char({d.name}).','castel%d.dcm');
    [idx,idx] = sort(num);
    d = d(idx);
     
    %{d.name}
    Et sinon plus généralement, la norme DICOM ne spécifie pas que le nom des fichiers soit utilisé pour le classement des images. En théorie, il te faut au mieux le fichier DICOMDIR, au pire lire toutes les images et les classer par date/heure d'étude et d'acquisition.

    Mais bon dans ton cas, les images sont peu être dans le bon ordre quand même...

    Et aussi si le nom des fichiers est plus générique, tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    num = strread(char({d.name}).','%*s%d.dcm');

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Merci encore pour le code.
    Dans le cadre de l'exemple castel%d, cela marche très bien.
    Sinon mes images dicom sont issues d'une acquisition volumique donc elles ont un ordre précis.

    Le point général que tu as mentionné m'intéresse particiulièrement, mais le code renvoie systématiquement une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    num = strread(char({filelist.name}).','%*s%d.dcm');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Error using ==> dataread
    trouble reading integer from file (row1, field2) ==> castel2.dcm castel3.dcm castel4.dcm castel5.dcm
    Error in ==> strread at 51
    J'ai essayé d'autres formats, d'autres syntaxe et même de regarder comment est fait la fonction strread mais je reste bloqué.

  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 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Arf... désolé...

    Une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    names = [filelist(:).name];
    idx = isstrprop(names,'digit');
    names(~idx) = ' ';
    num = str2num(names)
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    matches = regexp([filelist(:).name],'\d*','match')
    num = str2num(char(matches))

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    bonjour,

    Je te remercie pour toutes ces réponses, cela m'aide beaucoup.
    Toutes les solutions marchent très bien.

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

Discussions similaires

  1. Pb avec Tableau de cellules
    Par madislak dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/06/2006, 16h09
  2. BO tableau fusion cellule
    Par marion782 dans le forum Deski
    Réponses: 5
    Dernier message: 19/05/2006, 17h31
  3. [VBA]tableau de cellules
    Par max2245 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 22/01/2006, 20h42
  4. [Tableaux] Réorganiser un tableau apres un merge()
    Par Death83 dans le forum Langage
    Réponses: 3
    Dernier message: 07/01/2006, 02h39
  5. [Tableaux] Réorganiser un tableau
    Par skea dans le forum Langage
    Réponses: 6
    Dernier message: 03/01/2006, 12h59

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