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

Images Discussion :

Obtenir les informations d un fichier Dicom


Sujet :

Images

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut Obtenir les informations d un fichier Dicom
    Bonjour,

    Je dispose de fichiers dicom de type CTData.

    Afin de lire mes fichiers dicom avec la sequence correcte, je dois accéder dans un premier temps aux tags contenus dans le header de mes fichiers.

    Je voulais savoir comment faire pour accéder a ces tags et ensuite classer mes images.

    Les tags qui me seraient utiles sont, je pense,
    InstanceNumber
    Width/Rows
    Height/Columns
    PixelSpacing
    SliceThickness

    J ai essaye comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    I = dicomread('IM2.dcm');
     
    info = dicominfo('IM2.dcm');
    I = dicomread(info);
    imshow(I,'DisplayRange',[]);
    mais la il n apparait que l image.

    Je continue mes recherches mais si quelqu un pouvait m aider ca serait gentil.
    Merci d´avance.

  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 304
    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 304
    Points : 52 886
    Points
    52 886
    Par défaut
    Fais simplement ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    info = dicominfo('IM2.dcm')
    Et regarde bien la variable info (qui devrait être une structure)
    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 du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Merci

    ben le probleme c est que j ai pas trouvé comment "regarder" la variable info.
    Je pense qu'elle contient les infos mais je sais pas comment les utiliser

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Je crois avoir une petite idée :

    Il faut que j'ouvre tous les dicom que je possede dans mon fichier CTData, a l aide d une boucle, que je stocke l'information info.InstanceNumber et info.Filename et qu ensuite quand je vais faire ma compilation des images dans une matrice simple, je la réalise grace aux infos info.InstanceNumber

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 886
    Points
    52 886
    Par défaut
    Tout à fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    d = dir('*.dcm');
    for n=1:numel(d)
       file = sprintf('IM%d.dcm',n);
       info(n) = dicominfo(file);
    end
    Sinon, il doit aussi exister un fichier DICOMDIR à la racine du dossier contenant les images, non ?
    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)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Oui ce que j avais cru comprendre c est que les informations sur l ordre de sequencement est contenu dans ce fichier dicomdir mais je n ai rien de ce type.
    J ai juste une fichier CTData contenant toutes mes images.

    Je vais essayer ta reponse
    merci

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Cool merci beaucoup

    En fait c est comme le C
    (je suis désolé je decouvre matlab ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    d = dir('*.dcm');
     
    for n=1:numel(d)
       file = sprintf('IM%d.dcm',n);
       info(n) = dicominfo(file);
    end
     
     
    for n=1:numel(d)
        for m=1:numel(d)
            if (info(m).InstanceNumber == n)
     
       end
    end
    mais je sais pas quoi mettre comme instruction apres mon if sachant que mon but c est de lire les fichiers avec un sequencement correct

    Bon je continue de chercher

    Merci encore

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Voila ce que ca donne (code ci dessous)
    Mon resultat est une simple image apres 4-5 minutes de travail (de l ordinateur) jointe ci apres

    En fait je sais pas trop sur quoi je dois deboucher.

    Ma prochaine etape est de compiler les images dans une simple matrice apres avoir modifie leur slice thickness...
    L image que j obtiens ne correspond pas a la simple matrice mais sans modification du slice thickness ?

    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
    d = dir('*.dcm');
     
    for n=1:numel(d)
       file = sprintf('IM%d.dcm',n);
       info(n) = dicominfo(file);
    end
     
    for i=1:numel(d);
        for j=1:numel(d);
            if info(j).InstanceNumber==i
                dicomread(info(j).Filename)
                dicominfo(info(j).Filename)
                imshow(info(j).Filename,'DisplayRange',[]);
            end
        end
    end
    Images attachées Images attachées  

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 886
    Points
    52 886
    Par défaut
    Pour obtenir l'ordre des images suivant le champ Instance Number, fais simplement ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    d = dir('*.dcm');
     
    for n=1:numel(d)
       file = sprintf('IM%d.dcm',n);
       info(n) = dicominfo(file);
       IN(n) = info(n).InstanceNumber;
    end
     
    [pasbesoin,idx] = sort(IN);
    Maintenant pour afficher par exemple la 3ème image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    I = dicomread(info(idx(3)));
    imshow(I,'DisplayRange',[]);
    Si tu veux obtenir un empilage de tes images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for n = 1:numel(idx)
       I(:,:,n) = dicomread(info(idx(n)));
    end
    Mais il faut que toutes les images soient de la même dimension.
    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)

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    ok
    je me lance dans le resize
    merci beaucoup

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    J ai essaye avec la methode imresize
    mais sans succes
    Je pense que c est car j essaye de l appliquer a un fichier dicom
    est ce possible ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    info = dicominfo('IM1.dcm');
    I = dicomread(info);
    imshow(I,'DisplayRange',[]);
     
    B = imresize(I,[3,690 3,690],bilinear);
    imshow(B);
    J ai aussi essaye avec la methode set de la maniere suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(I,'XData',[0,9765],'YData',[0,9765]);
    mais sans succes non plus

    Je me demande si je dois pas attribuer directement les valeurs souhaitées dans le header

    Info.Width = '3,690';
    Info.Height = '3,690';

    Je vais essayer

    Ps : je dois les resizer en 0,9765 mm ( soit 3,690 pxl non ? ) dans les directions X et Y mais je dois faire attention car les thickness sont differentes et il faudra les rétablir a 2,5 mm

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    I = dicomread('IM1.dcm');
     
    info = dicominfo('IM1.dcm');
     
     
    info.Width = '0,9765';
    info.Height = '0,9765';
     
    dicomwrite(I, 'newimage.dcm', info);
    J ai essaye avec cette methode
    J obtiens bien un nouveau fichier, mais mes valeurs Width et Height n´ont pas changé

    Hum

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 886
    Points
    52 886
    Par défaut
    Je ne comprend pas pourquoi tu veux changer la taille des images vers l'unité métrique...
    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)

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Je n ai pas le choix.
    C est dans les consignes du projet


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for i=1:224
    file_name = strcat('IM',num2str(i));
    dicom_info = dicominfo(file_name);
    anatomical_location_of_dicom_image = dicom_info.InstanceNumber;
    dicom_image = dicomread(file_name);
     
    % Do the resizing in the line below
    dicom_image_resized = imresize(dicom_image, [<new_im_height> <new_im_width>]);
     
    volume_data(:,:,anatomical_location_of_dicom_image) = dicom_image_resized;
    end
    J ai trouve ce bout de code pour modifier les images mais je sais vraiment pas quoi mettre comme taille : En fait je dois avoir dans les directions x et y 0,9765 mm

    Un copain m a dit qu il y avait une autre alternative, il m a donne le code de l exemple
    Par ce biais je dois prendre les dimensions de l image et ensuite appliquer les miennes
    mais je bloque au meme point : quelles dimensions je dois mettre pour avoir 0,9765 mm en x et y et 2,5 mm en Z


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    % Let's say we have a variable named "volData" of size [304, 256, 90] and we
    % want to resize it to [128, 256, 64]; then we use the following:
     
    [X, Y, Z] = meshgrid(linspace(1,304,128), 1:256, linspace(1,90,64));
    resizedVolData = interp3(volData,X,Y,Z);

  15. #15
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 886
    Points
    52 886
    Par défaut
    Tout ceci n'est pas très clair... à quoi vont servie tes images redimensionnées ?

    Il y a plusieurs champs utiles dans un fichier Dicom pour connaitre les dimensions d'une image :

    (0028,0010) Rows : nombre de pixels de chaque ligne
    (0028,0011) Columns : nombre de pixels de chaque colonne
    (0028,0030) Pixel Spacing : espacement en unité métrique entre deux pixels
    Si j'ai bien compris ton problème, tu veux modifier Rows et Columns pour que Pixel Spacing soit égal à 0,9765 mm, c'est ça ? Si c'est le cas, une simple règles de trois fera l'affaire pour trouver les bons paramètres de IMRESIZE.

    Mais bon, encore une fois, j'ai bien l'impression que tu n'as pas tout compris dans ton projet.. et encore moins dans la manipulation des fichiers Dicom
    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)

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Mais bon, encore une fois, j'ai bien l'impression que tu n'as pas tout compris dans ton projet.. et encore moins dans la manipulation des fichiers Dicom
    Je suis pas le seul a me le dire

    Avec mes images redimensionnées, je vais ensuite les compiler ensemble pour obtenir un volume.
    Mais il faut qu elles aient cette taille et la meme thickness pour pouvoir être compiler ensemble.

    Merci pour ton aide

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/05/2012, 19h44
  2. Réponses: 2
    Dernier message: 22/05/2012, 15h21
  3. Réponses: 9
    Dernier message: 30/04/2009, 09h55
  4. Visualiser et lire les informations dans un fichier DICOM
    Par kamelcompte dans le forum Langage
    Réponses: 1
    Dernier message: 29/03/2009, 22h24

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