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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
| #include <stdio.h>
#include <math.h>
#include <gtk/gtk.h>
#include <stdlib.h> // pour les fonctions d'allocations
void ComputeImage(guchar *pucImaOrig,
int NbLine,
int NbCol,
guchar *pucImaRes)
{
int NbPixelTot;
int valpixR,valpixG,valpixB, NumLine, NumCol;
int NumChannel;
int NbChannels=3; /* on travaille sur des images couleurs*/
guchar ucMeanPix;
//indexs
int i=0;
int j=0;
int k=0;
int l=0;
//compteurs pour le nombre de pixel placés dans les classes
int Nb_DsClasseT=0;
int Nb_DsClasseM=0;
int Nb_DsClasseN=0;
//variables des moyennes par classe
int Somme_N=0;
int Somme_T=0;
int Somme_M=0;
int MoyClasseN=0;
int MoyClasseT=0;
int MoyClasseM=0;
//-------------------allocation mémoire
int *classeM = calloc (NbLine*NbCol*NbChannels,sizeof(int *));
int *classeT = calloc (NbLine*NbCol*NbChannels,sizeof(int *));
int *classeN = calloc (NbLine*NbCol*NbChannels,sizeof(int *));
int *tablInter = calloc (NbLine*NbCol*NbChannels,sizeof(int *)); // tableau intermédiaire des valeurs moyennes
//--Initialisation de tableau
NbPixelTot=NbLine*NbCol;
printf("NbLigne=%d NbCol=%d NbPixelTot=%d\n",NbLine,NbCol,NbPixelTot);
for(NumLine=0;NumLine<NbLine;NumLine++)
{
for(NumCol=0;NumCol<NbCol*NbChannels;NumCol=NumCol+3)
{
valpixR=*(pucImaOrig+NumLine*NbCol*NbChannels+NumCol);
valpixG=*(pucImaOrig+NumLine*NbCol*NbChannels+(NumCol+1));
valpixB=*(pucImaOrig+NumLine*NbCol*NbChannels+(NumCol+2));
ucMeanPix=(unsigned char)((valpixR + valpixG + valpixB)/3);
if((ucMeanPix>=0)&&(ucMeanPix<=80))
{
classeM[i]=ucMeanPix; Nb_DsClasseM=Nb_DsClasseM+1;
i++;
}
if((ucMeanPix>80)&&(ucMeanPix<=200))
{
classeT[j]=ucMeanPix; Nb_DsClasseT=Nb_DsClasseT+1;
j++;
}
if((ucMeanPix>200)&&(ucMeanPix<=255))
{
classeN[k]=ucMeanPix; Nb_DsClasseN=Nb_DsClasseN+1;
k++;
}
*tablInter=ucMeanPix; //tableau intermédiaire testé et rempli correctement
}
}
for(i=0;i<Nb_DsClasseM;i++)
{
Somme_M=Somme_M+classeM[i];
}
for(j=0;j<Nb_DsClasseT;j++)
{
Somme_T=Somme_T+classeT[j];
}
for(k=0;k<Nb_DsClasseN;k++)
{
Somme_N=Somme_N+classeN[k];
}
//calculs des moyennes par classe
MoyClasseM=Somme_M/Nb_DsClasseM;
MoyClasseT=Somme_T/Nb_DsClasseT;
MoyClasseN=Somme_N/Nb_DsClasseN;
//printf("%d-",tablInter[0]);
//redéfinition du tableau intermédiaire (tablInter) avec les valeurs des moyennes
//---------
//for(NumChannel=0;NumChannel<NbChannels;NumChannel++)
// *(pucImaRes+NumLine*NbCol*NbChannels+NumCol+NumChannel)= ucMeanPix;
printf("\nNombre dans classe T:%d\nNombre dans classe M:%d\nNombre dans classe N:%d\n", Nb_DsClasseT, Nb_DsClasseM, Nb_DsClasseN );
printf("Moyenne des valeurs dans la classe MER :%d\nMoyenne des valeurs dans la classe TERRE:%d\nMoyenne des valeurs dans la classe NUAGES:%d\n",MoyClasseM,MoyClasseT,MoyClasseN);
printf("Traitement terminé\n");
} |
Partager