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 :

Histogramme d'un volume IRM


Sujet :

Images

  1. #1
    Nouveau membre du Club
    Profil pro
    enseignat
    Inscrit en
    Décembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : enseignat

    Informations forums :
    Inscription : Décembre 2007
    Messages : 45
    Points : 35
    Points
    35
    Par défaut Histogramme d'un volume IRM
    Bonjour à tous

    j'utilise matlab, j'ai construit un volume 256*256*60 des images IRM cérébrales(dicom) par empilement des coupes en 2D, ma question c'est comment je peux visualiser l'histogramme de cet image en 3D et comment je peux avoir des approximations des composantes gaussiennes qui constituent l'histogramme à fin d'identifier les différents descripteurs statistiques des tissus cérébrales.

    et merci d'avance

  2. #2
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    salut,

    si tu as appele ton volume "VOl", par exemple, tu peux tracer son histogramme en N classes avec la fonction hist:

  3. #3
    Nouveau membre du Club
    Profil pro
    enseignat
    Inscrit en
    Décembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : enseignat

    Informations forums :
    Inscription : Décembre 2007
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    merci beaucoup pour la réponse mais si je tape la commande le message que s'affiche c'est le suivant:

    ??? Error using ==> mtimes
    Integers can only be combined with integers of the same class, or scalar doubles.

    Error in ==> hist at 73
    xx = miny + binwidth*(0:x);

  4. #4
    Nouveau membre du Club
    Profil pro
    enseignat
    Inscrit en
    Décembre 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : enseignat

    Informations forums :
    Inscription : Décembre 2007
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    merci, ça va, j'ai pu visualiser l'histogramme du volume IRM, mais maitenant je cherche comment je peux avoir des approximations des composantes gaussiennes qui constituent l'histogramme afin d'identifier les différents descripteurs statistiques des tissus cérébrales.

    et merci d'avance

  5. #5
    Membre actif

    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 170
    Points : 202
    Points
    202
    Par défaut
    Citation Envoyé par kamelcompte Voir le message
    merci, ça va, j'ai pu visualiser l'histogramme du volume IRM, mais maitenant je cherche comment je peux avoir des approximations des composantes gaussiennes qui constituent l'histogramme afin d'identifier les différents descripteurs statistiques des tissus cérébrales.

    et merci d'avance
    Il te faut définir ton nombre de gaussienne, puis faire une descente de gradient sur les paramètres de tes gaussienne afin de minimiser la distance entre ton histo et tes gaussiennes.

    Bon courage

  6. #6
    Membre actif

    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 170
    Points : 202
    Points
    202
    Par défaut Algo EM
    Salut,

    Voila un code que j'ai trouvé sur le matlab file exchange et modifié. Il permet de faire ce que tu veux sur l'histogramme avec un algo EM:


    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    function [mu,v,p,h]=EMHistoEstimation3d(ima,k)
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %
    %   Expectation Maximization image segmentation
    %
    %   Input:
    %          ima: grey color image
    %          k: Number of classes
    %   Output:
    %          mu: vector of class means 
    %          v: vector of class variances
    %          p: vector of class proportions   
    %
    %   Example: [mu,v,p]=EMSeg(image,3);
    %
    %   Author: Prof. Jose Vicente Manjon Herrera
    %    Email: <a href="mailto:jmanjon@fis.upv.es">jmanjon@fis.upv.es</a>
    %     Date: 02-05-2006
    %   
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    % check image
    sima=size(ima);
    %copy=ima;           % make a copy
    ima=ima(:);         % vectorize ima
    mi=min(ima);        % deal with negative 
    ima=ima-mi+1;       % and zero values
    m=max(ima);
    s=length(ima);
     
    % create image histogram
     
    h=histogram(ima);
    x=find(h);
    h=h(x);
    x=x(:);h=h(:);
     
    % initiate parameters
     
    mu=(1:k)*m/(k+1);
    v=ones(1,k)*m;
    p=ones(1,k)*1/k;
     
    % start process
     
    sml = mean(diff(x))/1000;
    while(1)
            % Expectation
            prb = distribution(mu,v,p,x);
            scal = sum(prb,2)+eps;
            loglik=sum(h.*log(scal));
     
            %Maximizarion
            for j=1:k
                    pp=h.*prb(:,j)./scal;
                    p(j) = sum(pp);
                    mu(j) = sum(x.*pp)/p(j);
                    vr = (x-mu(j));
                    v(j)=sum(vr.*vr.*pp)/p(j)+sml;
            end
            p = p + 1e-3;
            p = p/sum(p);
     
            % Exit condition
            prb = distribution(mu,v,p,x);
            scal = sum(prb,2)+eps;
            nloglik=sum(h.*log(scal));                
            if((nloglik-loglik)<0.0001) break; end;        
     
            clf
            plot(x,h);
            hold on
            plot(x,prb,'g--')
            plot(x,sum(prb,2),'r')
            drawnow
    end
     
     
    function y=distribution(m,v,g,x)
    x=x(:);
    m=m(:);
    v=v(:);
    g=g(:);
    for i=1:size(m,1)
       d = x-m(i);
       amp = g(i)/sqrt(2*pi*v(i));
       y(:,i) = amp*exp(-0.5 * (d.*d)/v(i));
    end
     
     
    function[h]=histogram(datos)
    datos=datos(:);
    ind=find(isnan(datos)==1);
    datos(ind)=0;
    ind=find(isinf(datos)==1);
    datos(ind)=0;
    tam=length(datos);
    m=ceil(max(datos))+1;
    h=zeros(1,m);
    for i=1:tam,
        f=floor(datos(i));    
        if(f>0 & f<(m-1))        
            a2=datos(i)-f;
            a1=1-a2;
            h(f)  =h(f)  + a1;      
            h(f+1)=h(f+1)+ a2;                          
        end;
    end;
    h=conv(h,[1,2,3,2,1]);
    h=h(3:(length(h)-2));
    h=h/sum(h);

Discussions similaires

  1. [Débutant] Histogramme IRM cérébrales
    Par sonia-espagna dans le forum Images
    Réponses: 4
    Dernier message: 17/07/2012, 10h25
  2. Réponses: 5
    Dernier message: 23/06/2011, 14h37
  3. Questions sur chartfx (histogramme)
    Par lejert dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/01/2004, 13h54
  4. volume de windows
    Par RCA dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 20/03/2003, 17h20
  5. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 09h37

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