Page principale   Liste par ordre alphabétique   Liste des composants   Liste des fichiers   Composants   Déclarations   Pages associées  

normalize.c

Aller à la documentation de ce fichier.
00001 
00011 #include "utils.h"
00012 #include "inricache.h"
00013 #include <inrimage/image.h>
00014 #include <stdlib.h>
00015 
00016 extern void imerror ( int code, char * format, ...);
00017 
00022 static char Ucmd[]=
00023 "[s2D] [norm_s2d] [d2D] [norm_d2D] [-min MIN] [-max MAX] [-cache taille_cache] [-time]";
00024 
00028 static char Udetail[]=
00029 "genere norm_s2D et norm_d2D les images derivees de s2D et d2D, telles que les valeurs dans s2D et d2D soient reparties entre 0 et 1, tout en conservant l'ecart relatif entre s2D et d2D. La precision de valeurs MIN et MAX permet d'imposer l'intervalle dans lequel on va etaler nos fonctions. MIN et MAX doivent appartenir a [0;1] pour etre prises en compte";
00030 
00031 int main(int argc,char ** argv)
00032 {
00033   struct nf_fmt gfmt;
00034   char img[80];
00035   int time_flag,taille_cache;
00036   float min2D,max2D;
00037   double min_calc=0,max_calc=0;
00038   double min_curr=0,max_curr=0;
00039   int i;
00040   int nb_inricaches=1;
00041   inricache ** iCaches, ** normed_iCaches;
00042   char ** noms_iCaches=(char **)malloc(sizeof(char *));
00043   char ** noms_Normed_iCaches=(char **)malloc(sizeof(char *));
00044 
00045   for (i=0;i<9;i++)
00046     gfmt.lfmt[i]=0;
00047   for (i=0;i<3;i++)
00048     gfmt.offsets[i]=0;
00049   gfmt.maille=0;
00050   gfmt.bias=0;
00051   gfmt.scale=1;
00052 
00053   inr_init(argc,argv,"1.0",Ucmd,Udetail);
00054   /* recherche des fichiers d'entree et de sortie. en cas de redirection d'entrees/sortie, infileopt renvoie 0. on est oblige de faire une lecture avant la boucle while */
00055 
00056   noms_iCaches[0]=(char *)malloc(80*sizeof(char));
00057   infileopt(img);
00058   strcpy(noms_iCaches[0],img);
00059   noms_Normed_iCaches[0]=(char *)malloc(80*sizeof(char));
00060   outfileopt(img);
00061   strcpy(noms_Normed_iCaches[0],img);
00062 
00063   while(infileopt(img))
00064     {
00065       nb_inricaches++;
00066       noms_iCaches=(char **)realloc(noms_iCaches,nb_inricaches*sizeof(char *));
00067       noms_Normed_iCaches=(char **)realloc(noms_Normed_iCaches,nb_inricaches*sizeof(char *));
00068 
00069       noms_iCaches[nb_inricaches-1]=(char *)malloc(80*sizeof(char));
00070       strcpy(noms_iCaches[nb_inricaches-1],img);
00071       noms_Normed_iCaches[nb_inricaches-1]=(char *)malloc(80*sizeof(char));
00072       outfileopt(img);
00073       strcpy(noms_Normed_iCaches[nb_inricaches-1],img);
00074     }
00075 
00076   /* recuperation des options de format de l'image */
00077   if(!igetopt1("-min","%f",&min2D))
00078     min2D=-1;
00079   if(!igetopt1("-max","%f",&max2D))
00080     max2D=-1;
00081   if (!igetopt1("-cache","%d",&taille_cache))
00082     taille_cache=1;
00083   time_flag=igetopt0("-time");
00084 
00085   /* verification des options restantes */
00086   if(tstopts()) /* s'il reste des options : exit avec message */
00087     iusage_(Ucmd,Udetail);
00088 
00089   /* ouverture des images */
00090 
00091   iCaches = (inricache **)malloc(nb_inricaches*sizeof(inricache *));
00092   normed_iCaches = (inricache **)malloc(nb_inricaches*sizeof(inricache *));
00093 
00094   /* les premieres options de verification different pour le premier inricache cree */
00095 
00096   iCaches[0]=cree_inricache(noms_iCaches[0],"e","",&gfmt,taille_cache);
00097   normed_iCaches[0]=cree_inricache(noms_Normed_iCaches[0],"c","a",&gfmt,taille_cache);
00098   extrema_inricache(iCaches[0],&min_curr,&max_curr);
00099   min_calc=min_curr;
00100   max_calc=max_curr;
00101 
00102 
00103   for (i=1;i<nb_inricaches;i++)
00104     {
00105       iCaches[i]=cree_inricache(noms_iCaches[i],"e","a",&gfmt,taille_cache);
00106       normed_iCaches[i]=cree_inricache(noms_Normed_iCaches[i],"c","a",&gfmt,taille_cache);
00107       extrema_inricache(iCaches[i],&min_curr,&max_curr);
00108       min_calc=min(min_calc,min_curr);
00109       max_calc=max(max_calc,max_curr);
00110     }
00111 
00112   /* verification de la validite des min et max demandes */
00113   if ((min2D<0) || (min2D>min_calc)) /* le minimum n'est pas impose */
00114     {
00115       if (min2D>min_calc)
00116          fprintf(stderr,"normalize: min demande (%f) superieur au min calcule (%f) : [Ignore]\n",min2D,min_calc);
00117     }
00118   else
00119     {min_calc=min2D;}
00120   
00121   if (max2D<0 || max2D<max_calc) /* le maximum n'est pas impose */
00122     {
00123       if (max2D>0)
00124          fprintf(stderr,"normalize: max demande (%f) inferieur au max calcule (%f) : [Ignore]\n",max2D,max_calc);
00125     }
00126   else
00127     {max_calc=max2D;} 
00128 
00129   /* normalisation des inricaches */
00130 
00131   fprintf(stderr,"normalize: %d images, min = %f max = %f\n",nb_inricaches,min_calc,max_calc);
00132 
00133   for (i=0;i<nb_inricaches;i++)
00134     normalize_inricache(iCaches[i],normed_iCaches[i],min_calc,max_calc,time_flag);
00135 
00136   /* fermeture des caches, liberation des variables */
00137 
00138   for (i=0;i<nb_inricaches;i++)
00139     {
00140       free(noms_iCaches[i]);
00141       free(noms_Normed_iCaches[i]);
00142       libere_inricache(iCaches[i]);
00143       libere_inricache(normed_iCaches[i]);
00144     }  
00145   free(noms_iCaches);
00146   free(noms_Normed_iCaches);
00147   free(iCaches);
00148   free(normed_iCaches);
00149 
00150   return EXIT_SUCCESS;
00151 }

Généré le Mon Nov 3 11:50:10 2003 par doxygen1.2.18