Bonjour tous le monde; j'ai un petit code en Matlab extrait d'un programme de segmentation d'image par le modèle de Ron Kimmel)

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
% '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);
tel que "phi" une matrice carré quelconque.

j'ai essayer de convertir ce code en C++ Builder (manuellement), mais je ne sais pas si je suis juste ou non, alors s'il y a quelqu'un qui peuvent m'aider je le remercie d'avance.

voici le code que j'ai écrit:

pour la fonction "redistance"

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
void __fastcall  TForm1::redistance(float **phi, int H, int W)
 
{
 
float**up=new float*[H];  // la heuteur de l'image
for(int i=0;i<H;i++)
  {
   up[i]=new float[W];   // la largeur de l'image
  }
 
float**v=new float*[H];
for(int i=0;i<H;i++)
  {
   v[i]=new float[W];
  }
 
float l2, l22;
 
for (int i=0;i<H;i++)
    for (int j=0;j<W;j++)
       {
        phi[i][j]=(fctsign(phi[i][j])+1)*999999; // fixé le tous positif
       }
 
        for (int z=1;z<3;z++)
           { 
            l2=2;
            if (z>1)
              {
               for (int i=0;i<H;i++)
               for (int j=0;j<W;j++)
                  {
               phi[i][j]=(1-fctsign(phi[i][j]))*999999; //fixé le tous négative
                  }
              }   // end if
                while (l2>1)
                    {
                    Updt(phi,v,H,W); // fonction update
                     l22=0;
                    for (int i=1;i<H-1;i++)
                      for (int j=1;j<W-1;j++)
                         {
                         l22=l22+pow((phi[i][j]-v[i][j]),2);
                         }
                    l2=l22;
                    for (int i=1;i<H-1;i++)
                    for (int j=1;j<W-1;j++)
                       {
                        phi[i][j]=v[i][j];
                       }
                    } // end while 
 
                if (z>1)
                  {
                   for (int i=0;i<H;i++)
                   for (int j=0;j<W;j++)
                       {
                       phi[i][j]=phi[i][j]-up[i][j];
                       }
                   }
                else
                    {
                     for (int i=0;i<H;i++)
                     for (int j=0;j<W;j++)
                        {
                         up[i][j]=phi[i][j];
                        }
                     }
 
               }// end for z
 
 
for (int i=0;i<H;i++)
   delete[]up[i];
   delete[]up;
 
for (int i=0;i<H;i++)
   delete[]v[i];
   delete[]v;
 
 }
et pour la fonction "Update ":

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
void __fastcall  TForm1::Updt(float **u,float **v, int H, int W)
 
{
 
 float mx,my,diff,minimum;
 
//Résoudre l'équation |grad u|=F(x,y)
 
//  déclaration de la matrice mask
float**mask=new float*[H];
for(int i=0;i<H;i++)
   {
    mask[i]=new float[W];
   }
 
// déclaration de  la matrice produit
float**produit=new float*[H];
for(int i=0;i<H;i++)
   {
    produit[i]=new float[W];
   }
 
for (int i=1;i<H-1;i++)
  for (int j=1;j<W-1;j++)
     {
     my=min(u[i][j+1],u[i][j-1]);
     mx=min(u[i+1][j],u[i-1][j]);
     minimum=min(mx,my);
     diff=mx-my;
 
     if (abs(diff)<1) // abs(mx-my)<1
       {
        mask[i][j]=1;
        produit[i][j]=mask[i][j]*((mx+my+sqrt(2-(diff*diff)))/(2+((1-mask[i][j])*(minimum+1))));
       }
     else
         {
          mask[i][j]=0;
          produit[i][j]=0;
         }
     }
 
for (int i=1;i<H-1;i++)
   for (int j=1;j<W-1;j++)
      {
       v[i][j]=min(produit[i][j],u[i][j]);
      }
 
// Libération de mémoire
 
for(int i=0;i<H;i++)
   delete[]mask[i];
   delete[]mask;
 
for(int i=0;i<H;i++)
   delete[]produit[i];
   delete[]produit;
}
et s'il y a des fautes merci de bien les signalées.