Bonjour,

J'ai recemment eu un exercice a faire en langage C :
Traiter l'image 10*10 inclue dans la fonction main :
* Analyser les groupes de 1 et les transformer en sous-groupes
Un groupe peut être un carré :
111
111
111

une croix :
010
111
010

Mais ne peuvent etre considérées comme un groupe les formes du genre:
001 010
010 100
001 000 etc.

On voudrait obtenir qqch du genre :

{0,1,0,1,0,0,0,0,0,0},
{0,1,0,1,0,0,2,2,2,0},
{0,1,1,1,0,0,2,2,2,0},
{0,0,0,0,0,2,2,2,2,0},
{0,0,0,0,2,2,2,0,0,0},
{0,0,0,0,0,2,0,0,0,0},
{3,3,3,0,0,0,0,4,0,0},
{3,3,3,0,0,0,4,4,4,0},
{0,3,0,5,5,0,0,4,0,0},
{0,0,0,5,5,0,0,0,0,0}};


* Calculer le barycentre de chaque sous-groupe

La correction que j'ai obtenu est la suivante :

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
 
#include <stdio.h>
 
void affiche(int tableau[10][10])
{int i=0, j=0;
 printf("\n");
 for(i=0;i<10;i++)
 {
  for(j=0;j<10;j++)
  printf("%4d",tableau[i][j]);
  printf("\n");
 }
 printf("\n");}
 
void clustering(int tableau[10][10])
{int groupe_actuel=2, i=0, j=0, groupe, groupe_old, i2, j2, temp;
 
 for(i=0;i<10;i++)
 {
  for(j=0;j<10;j++)
  if (tableau[i][j]==1)
  {groupe=0;
   if( (j>0)&&(i>0)&&(tableau[i][j-1]>1)&&(tableau[i-1][j]>1)&&(tableau[i-1][j]!=tableau[i][j-1]) )
   {groupe_old=tableau[i][j-1];
    groupe=tableau[i-1][j];
 
     for(j2=0;j2<10;j2++)
     if( tableau[i2][j2]==groupe_old)
     tableau[i2][j2]=groupe;}
 
    if(i>0)
    {if( tableau[i-1][j]>0 )
     groupe=tableau[i][j-1];}
 
    if(j>0)
    {if(tableau[i][j-1]>0)
     groupe=tableau[i][j-1];}
 
    if(groupe==0) 
    {groupe=groupe_actuel;
     groupe_actuel++;}
 
    tableau[i][j]=groupe;
    }
 
 }
 
    i2=2;
    j2=1;
    temp=0;
 
    while(i2 < groupe_actuel)
    {
     for(i=0;i<10;i++)
     {
      for(j=0;j<10;j++)
      if (tableau [i][j]!=0)
      { if (tableau[i][j]==i2)
        {tableau[i][j]=j2;temp++;}
      }
 
     }
      if (temp!=0)
      {j2++;temp=0;}
 i2++;
    }
 
}
 
main()
{int i;
 int t[10][10]= {{0,1,0,1,0,0,0,0,0,0},
                      {0,1,0,1,0,0,1,1,1,0},
                      {0,1,1,1,0,0,1,1,1,0},
                      {0,0,0,0,0,1,1,1,1,0},
                      {0,0,0,0,1,1,1,0,0,0},
                      {0,0,0,0,0,1,0,0,0,0},
                      {1,1,1,0,0,0,0,1,0,0},
                      {1,1,1,0,0,0,1,1,1,0},
                      {0,1,0,1,1,0,0,1,0,0},
                      {0,0,0,1,1,0,0,0,0,0}};
 affiche(t);
 printf("--------------------------------\n");
 clustering(t);
 affiche(t);
}
Mais il semble y avoir un problème...
Tel quel, le code est compilé sans pb mais il ya une
erreur a l'execution (Voulez vous envoyer le rapport
d'erreur... blablabla...).
Du moins chez moi.

Je ne vois pas trop d'où çà peut venir, mais
j'ai remarqué que si on initialise i2 et j2 à 0, pas d'erreur
a l'execution mais les groupes ne sont pas formés comme
on voudrait.

Si vous pouviez m'éclairer, merci d'avance.