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 :

[Compiler] Conversion Matlab C++ builder


Sujet :

MATLAB

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Par défaut [Compiler] Conversion Matlab C++ builder
    Bonjour tous le monde;

    J'ai un programme écrit sous Matlab, je veut le convertir en C++ Builder j'ai essayer Matlab Compiler mais il me donne beaucoup d'erreurs.

    le programme est un programme de segmentation d'images en utilisant le modèle de Ron Kimmel, et si vous voulez la documentation correspondante voici le lien:

    http://www.wisdom.weizmann.ac.il/~mi...integration.ps

    le code complet:


    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(sum(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
    J'ai essayer de le convertir manuellement mais j'ai u des difficultés alors je demande l'aide; et par la suite je vous donne quesque j'ai fait et quesu'il me reste à faire.

    la 1ère partie où j'ai pas de pblm:

    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
    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'))';
    c'est un calcul de base: dérivée première et second ...ca je sais le faire.

    la deuxième partie où y a pas de pblm:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    % 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(sum(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);
    car aprés l'initialisation des signes je peut calculer l'intensité moyenne des pixels internes et externes.

    la 3ème partie où j'ai pas de pblm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %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);

    et il me reste a faire ces parties:

    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
    % '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;  % => c'est quoi up?!
        else 
           up=u;
        end % if
    end % for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %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);
    le dernier code je crois qu'il va être facile si je determine les autres fonctions :

    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
    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
    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Par défaut
    Afin que l'on puisse t'aider, il nous faut surtout des infos supplémentaires sur tes erreurs:
    Quelles sont tes erreurs avec le ML Compiler?
    Quelle est ta version MATLAB?
    Quelle est ta ligne de compilation?

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

    Merci pour la réponse, pour le compiler j'ai pas d'erreur, mais qu'on j'ouvre le fichier converti il y a dedans beaucoup "Error".

    La version du matlab est la 6.5 complète.

    Merci

  4. #4
    Membre Expert
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Par défaut
    Ces 2 messages se contredisent un peu :
    Citation Envoyé par nadjib2007

    J'ai un programme écrit sous Matlab, je veut le convertir en C++ Builder j'ai essayer Matlab Compiler mais il me donne beaucoup d'erreurs.
    et

    Citation Envoyé par nadjib2007
    Salut;

    pour le compiler j'ai pas d'erreur, mais qu'on j'ouvre le fichier converti il y a dedans beaucoup "Error".

    puis pour terminer:

    Citation Envoyé par nadjib2007
    La version du matlab est la 6.5 complète.
    ce n'est pas trop malin de marquer ça

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

    bon j'ai pas bien expliquer le début mais je répète que les erreurs je les trouves dans le fichier converti.

    pour " Complète" c'est pas un problème je crois si j'ai écrit ca ...!!!!
    car parfois il y a des version non complète et j'ai dit ca pour oublier que le problème est dans le Matlab...seulement

    je vous laisse comme vous voulez...Merci tug83

  6. #6
    Membre Expert
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Par défaut
    Citation Envoyé par nadjib2007

    bon j'ai pas bien expliquer le début mais je répète que les erreurs je les trouves dans le fichier converti.
    bon soit...et quelles sont ces erreurs?

Discussions similaires

  1. [COMPILER] Conversion MATLAB vers C++
    Par milach dans le forum MATLAB
    Réponses: 5
    Dernier message: 07/05/2008, 11h47
  2. Compilation avec MATLAB R13
    Par tsharlz dans le forum MATLAB
    Réponses: 2
    Dernier message: 31/10/2006, 11h51
  3. [improfile] Conversion MATLAB -> C
    Par fakhirov dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/10/2006, 15h35
  4. Conversion matlab / java
    Par coolgeff dans le forum MATLAB
    Réponses: 6
    Dernier message: 26/06/2006, 17h44
  5. Réponses: 1
    Dernier message: 29/10/2003, 12h16

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