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 :

Dicom to 3D volume


Sujet :

Images

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    je vous propose le morceau de code "fonctionnel" que j ai reussi a généré :
    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
     
    dicomFilesZm = dir(fullfile(myDcmFolder, 'SLZ-*.dcm')); %recup des fichiers
    dicomFilesZp = dir(fullfile(myDcmFolder, 'SLZ+*.dcm')); %recup des fichiers
     
    Z = dicomFilesZm(end:-1:1); % j'inverse l'ordre des fichier 'moins' de maniere a avoir slz-2, slz-1,slz+0...
     
    dicomFilesZ = [Z ; dicomFilesZp]; % matrice des nom de fichiers dans l'ordre.
     
    Iz1 = fullfile(myDcmFolder, dicomFilesZ(1).name); 
    v = NaN([size(dicomread(Iz1)) numel(dicomFilesZ)]); % recuperation de la taille d'une image pour créer une matrice vide.
     
    for i = 1 : numel(dicomFilesZ)
        Iz = fullfile(myDcmFolder, dicomFilesZ(i).name);
        v(:,:,i) = dicomread(Iz); % je remplis la matrice v
    end
     
    % j'affiche mon volume en utilisant un truc trouvé sur le net :P
     
    p = patch( isosurface(v,0) );
    isonormals(v, p)
    set(p, 'FaceColor','r', 'EdgeColor','none')
    daspect([1 1 1])
     
    % Je peux voir mon volume sur matlab apres un certain temps de chargement
    Je ne comprends pas l'utilité de meshgrid et encore moins comment l'utiliser dans mon cas :s (pourtant j'ai lu son explication et je n'y met pas de mauvaise volonté)

    ma matrice v est rempli de nombre -6092 a -800 et des brouettes certainement correspondant aux teintes de l'image. le rendu de mon code est apparemment fait pour des données binaires (tout noir pour le volume, tout blanc pr le vide)(bout de code récuperé ici)

    je sens que je me rapproche de quelque chose
    La visualisation 3D est quand meme tres lente : v(561*561*85)

    merci

  2. #22
    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 884
    Points
    52 884
    Par défaut
    Avec la méthode que tu as choisie, tu n'as pas besoin de MESHGRID puisque tu ne cherches pas à obtenir des valeurs "entre" les différentes coupes.

    Pour l'affichage, c'est la valeur passée à ISOSURFACE (ici 0) qui change tout.
    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. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    Merci,

    j'ai essayé de changer la valeur de isosurface(v, 0) en 1 ou -1 et je vois toujours en noir et blanc.

  4. #24
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    C'est étonnant que tu obtiens du noir sur ta figure alors que tu lui demandes d'afficher les faces en rouge...

    J'ai testé ton code avec tes images, et j'ai eu un affichage correct.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #25
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    :s

    Tu obtiens le meme contrast qu'avec imshow ? (un peu comme une radio ?)
    Peut etre est ce un probleme de mémoire de mon ordi et tout est simplifier

    Message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Out of memory. Type HELP MEMORY for your options.
     
    Error in meshgrid (line 78)
            yy = yy(:,ones(1,nx),ones(nz,1));
     
    Error in isonormals (line 53)
            [x y z] = meshgrid(1:sz(2), 1:sz(1), 1:sz(3));
     
    Error in test (line 71)
      isonormals(v, p)                              %# compute and set normals
    Je voulais faire ca pour simplement mieux visualiser et comprendre. La finalité de tout ca est de comparé des volumes 3D (leur enveloppe). Je voulais simplement soustraire 2 matrice et définir une sorte de coefficient de correlation avec le resultat, mais les volumes ne sont pas forcement placé de la meme maniere dans la matrice.

    Avez vous une methode, si ce n'est une solution ?

  6. #26
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    isonormals(v, p) sert à améliorer la visualisation mais ce n'est pas indispensable. Essaie le code en commentant cette ligne.

    La fonction isosurface permet de générer un contour (donc une surface), ce n'est pas une fonction de rendu volumique. Je dis ça par rapport à ta remarque sur imshow : isosurface n'est pas une généralisation de imshow à la 3D.

    Pour ta question, je n'ai pas bien compris ce que tu souhaites faire et ou tu bloques...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #27
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Points : 25
    Points
    25
    Par défaut
    J'ai essayé en décommentant et en effet ma figure est bien rouge avec un jolie contraste. Elle parait plus applatit mais peu importe.

    Ma question concerne l'identification d'un volume dans un autre. C'est a dire un 'gros' volume A d'une part et une parti de ce volume d'autre part B. Mon but est de pouvoir replacer B dans A.

    Il existerait la fonction imregister, mais ne fonctionnant qu'avec du 2D dans ma version matlab, mais c'est quelque chose qui aurait été utile.

    On peut egalement penser a les replacer en utilisant des surfaces planes et des sommets, mais sous matlab, je ne sais pas comment demander a l'utilisateur de sélectionner des points (surtout que l'affichage est au ralentit) pour en faire des marqueurs.

  8. #28
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Pour la selections, tu peux utiliser le datacursormode, mais il n'est pas évident à manipuler.

    Pour l'affichage, tu peux peut-être sous-échantilloner tes données, cela dégrade les images mais te permettra peut-etre de mieux manipuler les graphiques. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p = patch( isosurface(v(1:2:end,1:2:end,1:2:end),0) );
    divise par 2 la résolution.

    Je crois que la bibliothèque SPM propose des outils d'alignement et de recalage.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  9. #29
    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 884
    Points
    52 884
    Par défaut
    Citation Envoyé par ocelote Voir le message
    Elle parait plus applatit mais peu importe.
    Cela vient des réglages de la propriété DataAspectRatio (ici [1 1 1]) de l'objet Axes dans lequel est affiché le volume.

    Dans ton tableau 3D sous MATLAB, l'espacement entre chaque voxel est constant (1,1,1), alors qu'en réalité cela devrait être quelque chose comme (PixelSpacing(1), PixelSpacing(2), <distance entre les coupes>)

    La méthode que je préconisait prenait ça en compte directement via la matrice de passage (ligne, colonne) => (x,y,z)

    Pour améliorer l'affichage, tu peux commencer par ajouter les lignes suivantes à ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set(gcf,'doublebuffer','on');
    axis vis3d
    Je te déconseille aussi d'utiliser de la transparence.

    Pour bouger le volume, je te conseille de te servir de ces outils : View Control with the Camera Toolbar
    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)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. création d'un patient en volume dicom
    Par sellamelie dans le forum Images
    Réponses: 1
    Dernier message: 19/07/2011, 10h37
  2. Réponses: 5
    Dernier message: 04/06/2007, 13h49
  3. 50Gb de volume de données ???
    Par hubble dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 14/04/2004, 17h39
  4. [Volume des tables et performance]
    Par kase74 dans le forum InterBase
    Réponses: 9
    Dernier message: 09/03/2004, 14h14
  5. volume de windows
    Par RCA dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 20/03/2003, 17h20

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