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 :

Problème d'implémentation !


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par défaut Problème d'implémentation !
    Bonjour tous le monde;

    J'ai un programme Matlab sert à segmenter une image en utilisant le modèle de Ron Kimmel, mon but est d'implémenter ce programme pour avoir quelle sont les résultats qu'on peut avoir avec ce modèle

    bon, le code 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
    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
    %-----------------------------------------------------------------------------------------------
    % Loccally One-dimensional (LOD) implicit scheme for closed geometric
    % active contour model+minimal variation+GAC+robust alignement
    % I=Input image matrix, Phi= Initial contour matrix (implicit form)
    % Balloon= Weighted area factor (scalar)
    % Align = Alignement force factro (scalar)
    % Max_Lloyd= The Max-Lloyd/ Chan-Vese threshold factor (scalar)
    % k= the time step (tau scalar)
    % iter= Maximal number of iterations (scalar)
     
    function Phi=LOD_Active_Contour(I,Phi,Balloon,Align,Max_Lloyd,k,iter)
    D2I=Dxx(I)+Dyy(I); P=Dx(I); Q=Dy(I);
    g=1./sqrt(1+P.^2+Q.^2); % example for computing g(x,y)
    delta=2; count=1;
    while and(delta>0.0001,count<iter)  % check if converged
     
       Phi_old=Phi;
       threshold=LloydMax(Phi,I); % Max-Lloyd/ Chan-Vese term
       alignement=-sign(P.*Dx(Phi)+Q.*Dy(Phi)).*D2I;  % Laplacien term
       Phi=Phi+k*(Balloon*g+Align*alignement+Max_Lloyd*thershold);
       for i=1:2, % i=1 => (I-tau*Ax) i=2 => (I-tau*Ay)
           Phi=Implicit(g(:),k,Phi); % (1/(I-tau*Ai))Phi
           Phi=Phi';g=g'; % Transpose for Ay
       end % for i
       Phi=redistance(Phi); % Use fast marching for re-distancing
       delta=sum(sum((Phi_old-Phi).^2)) % Compute L2 norm
       count=count+1;
       imshow(I,[]); hold on; contour(Phi,[00],'r'); hold off; drawnow;
    end % while and funtion
    %-----------------------------------------------------------------------------------------
    % Compute (1/(I-k*Al)) Phi using Thomas algorithm
    % k=time step, g=g(x,y) in column stack form
    function u=Implicit(g,k,Phi)
     
    gm= -k.*(g+g([end 1:end-1]))/2; % lower diag
    gc= 1-k.*(-2*g-g([end 1:end-1])-g([2:end 1]))/2; % main diag
    gp= -k.*(g+g([2:end 1]))/2; % upper diag
    u= Thomas(gc,gp(1:end-1),gm(2:end),Phi(:));
    u= reshape(u,size(Phi)); 
    %-------------------------------------------------------------------------------------------
    % Compute the Lloyd-Max/ Chan-Vese thersholding
    function force=LloydMax(Phi,I)
    mask_in=(Phi<0); inside the contour 
    mask_out= 1-mask_in; % rest of the domain
    I_in=sum(sul(mask_in.*I))/sum(mask_in(:)); % mean value
    I_out=sum(sum(mask_out.*I))/sum(mask_out(:));
    force=(I_out-I_in).*(I-(I_in+I_out)/2);
    %---------------------------------------------------------------------------------------------
    % 'Roughly' correct Phi to be a distance map of its zero set
    function u=redistance(Phi);
    u=(sign(Phi)+1)*999999; % set to infinity all positive
    for i=1:2,
        l2=2;
        if i>1 u=(1-sign(Phi))*999999; end % set to infinity all negative
        while l2>1,
              v=Update(u,1);
              l2=sum(sum((u-v).^2));
              u=v;;
        end % while
        if i>1 u=u-up; else up=u; end % if
    end % for
    %-----------------------------------------------------------------------------------------------
    %Solve |grad u|=F(x,y)  parallel version of the FMM
    function res=Update(u,F)
    mx=min(u([2:end end],:), u([1 1:end-1],:));
    my= min(u(:,[2:end end]), u(:,[1 1:end-1]));
    delm=(mx-my);
    mask=(abs(delm)<F);
    res=min(mask.*(mx+my+sqrt(2.*F.^2-delm.^2))./2+...
       (1-mask).*(min(mx,my)+F),u);
    %-----------------------------------------------------------------------------------------------
    function f=Dmx(P)
    f=P-P([1 1:end-1],:);
    %-----------------------------------------------------------------------------------------------
    function f=Dpx(P)
    f=P([2:end end],:)-P;
    %-----------------------------------------------------------------------------------------------
    function f=Dx(P)
    f=(Dpx(P)+Dmx(P))/2;
    %-----------------------------------------------------------------------------------------------
    function f=Dy(P)
    f=(Dx(P'))';
    %-----------------------------------------------------------------------------------------------
    function f=Dxx(P)
    f=Dpx(P)-Dmx(P);
    %-----------------------------------------------------------------------------------------------
    function f=Dyy(P)
    f=(Dxx(P'))';
    %-----------------------------------------------------------------------------------------------
    % Thomas Algorithm for trilinear diagonally dominant system:
    % B u=d(solve for u); B is given by its 3 diagonals:
    % alpha(1:N)=main diagonal, beta(1:N-1)=upper diagonal,
    % Gamma(1:N-1)=lower diagonal, (Compile first!)
    function u=Thomas(alpha,beta,gamma,d)
    N=length(alpha); r=beta;
    l=zeros(N-1,1); u=zeros(N,1);
    m=u; %zero
    m(1)=alpha(1);
    for i=1:N-1,
         l(i)=gamma(i)/m(i);
         m(i+1)=alpha(i+1)-l(i)*beta(i);
    end % for
    y=u; %zero
    y(1)=d(1);
    for i=2:N,
         y(i)=d(i)-l(i-1)*y(i-1);
    end % for
    u(N)=y(N)/m(N);
    for i=N-1:-1:1,
        u(i)=(y(i)-beta(i)*u(i+1))/m(i);
    end % for
    et d'après mes connaissances (je suis débutant) il faut crée un autre fichier par exemple : essai segmentation et on fait appel à les fonctions indiqués dans le programme principale, mais comment?!

    et si on remarque bien le programme il faut un contour initial (phi) je ne sais pas comment faire ça!!!

    s'il y a quelqu'un qui peut m'aider à implémenter ce programme je le remercie beaucoup...d'avance bien sur

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 47
    Par défaut
    mieux vaut donner une question claire et precise,c'est difficil de resoudre ton probleme si tu mets ton algorithme d'un coup.Essaye plutot d'y aller pas a pas et de poser la bonne question sur chacun des blocs de ton programme.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Où as-tu récupéré le code ? Il y avait peut être une documentation avec ?

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par défaut
    Bonjour;

    Pour la précision je crois pas que c'est difficile qu'es que j'ai dit : " dessiner un contour initiale (cercle par exemple) sur une image (qu'on veut la segmenter) puis mettre les valeur de ce cercle dans la matrice phi, puis exécuter le programme à l'aide des fonction cité.

    Pour le code je lé trouver dans un livre de Ron Kimmel "fast_edge_integration" tu peut le trouver sur google.

    Merci d'avance.

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par défaut
    Alors pas de solution...!!

    j'ai réflicher à une solution mais je ne sais pas comment la réaliser; par exemple je met au début du programme l'équation d'un cercle et je fixe le rayon que je veut puis à l'aide de la souris je clic sur l'image que je veut segmenter des objet dedans pour fixé le centre du cercle et quand je clic le cercle sera dessiner sur l'image.

    est ce que ça est réalisable; si oui aide moi a le faire.

    Et merci beaucoup beaucoup cher ami du forum developpez...

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 143
    Par défaut
    pour l'histoire d'initialiser avec un cercle, en cliquant sur l'image et tout et tout, oui c'est possible, moi j'avais telechargé le code pour une segmentation par detection de contour sur ce site, http://www.postulate.org/segmentation.php, et l'initialisation se faisait comme ca. essaye de fouiller leur code.

Discussions similaires

  1. Problème d'implémentation de shader GLSL
    Par Marco17 dans le forum OpenGL
    Réponses: 18
    Dernier message: 25/11/2007, 11h34
  2. Réponses: 4
    Dernier message: 06/08/2007, 02h22
  3. Problème d'implémentation du filtre de choc
    Par millie dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 01/05/2007, 10h26
  4. Réponses: 7
    Dernier message: 03/03/2007, 19h15
  5. Réponses: 12
    Dernier message: 01/07/2004, 11h03

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