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
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
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
00086 if(tstopts())
00087 iusage_(Ucmd,Udetail);
00088
00089
00090
00091 iCaches = (inricache **)malloc(nb_inricaches*sizeof(inricache *));
00092 normed_iCaches = (inricache **)malloc(nb_inricaches*sizeof(inricache *));
00093
00094
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
00113 if ((min2D<0) || (min2D>min_calc))
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)
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
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
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 }