00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "CINNIC/gaborElement.H"
00017 #include "Image/ColorOps.H"
00018 #include "Image/CutPaste.H"
00019 #include "Image/Image.H"
00020 #include "Image/Kernels.H"
00021 #include "Image/ShapeOps.H"
00022 #include "Raster/Raster.H"
00023 #include "Util/log.H"
00024 #include "Util/readConfig.H"
00025
00026 #include <cstdio>
00027 #include <cstdlib>
00028 #include <sys/types.h>
00029 #include <time.h>
00030
00031
00032
00033 const char* configFile;
00034
00035 const char* gaborElementFile;
00036
00037 const char* imageSaveName;
00038
00039 const char* saveDir;
00040
00041 readConfig configIn(25);
00042
00043 readConfig gaborIn(25);
00044
00045 std::vector<gaborElement> theGabors;
00046
00047 std::vector<Image<float> > theGaborImages;
00048
00049 std::vector<Image<float> > intermedImages;
00050
00051 std::vector<Image<float> > theMasterImages;
00052
00053 int gaborNumber, sizeX, sizeY;
00054 float backGround;
00055 char getX[100];
00056 char getY[100];
00057 char getSTDDEV[100];
00058 char getPERIOD[100];
00059 char getPHASE[100];
00060 char getTHETA[100];
00061 char getSIGMOD[100];
00062 char getAMPLITUDE[100];
00063 char getMASTER[100];
00064
00065
00066 int main(int argc, char* argv[])
00067 {
00068 Image<float> finalImage;
00069 Image<float> masterImage;
00070 Image<byte> convert;
00071 time_t t1,t2;
00072 (void) time(&t1);
00073 configFile = "gabor.conf";
00074 gaborElementFile = argv[1];
00075 saveDir = argv[2];
00076 configIn.openFile(configFile);
00077 gaborIn.openFile(gaborElementFile);
00078 gaborNumber = (int)gaborIn.getItemValueF("gaborNumber");
00079 LINFO("Number of Gabor Elements in Image %d",gaborNumber);
00080 backGround = gaborIn.getItemValueF("backGround");
00081 LINFO("backGround color in Image %f",backGround);
00082 imageSaveName = gaborIn.getItemValueC("imageSaveName");
00083 LINFO("Will save as file %s",imageSaveName);
00084 sizeX = (int)gaborIn.getItemValueF("sizeX");
00085 sizeY = (int)gaborIn.getItemValueF("sizeY");
00086 LINFO("IMAGE size %dx%d",sizeX,sizeY);
00087 finalImage.resize(sizeX,sizeY);
00088 masterImage.resize(sizeX,sizeY);
00089 for(int x = 0; x < finalImage.getWidth(); x++)
00090 {
00091 for(int y = 0; y < finalImage.getHeight(); y++)
00092 {
00093 finalImage.setVal(x,y,backGround);
00094 }
00095 }
00096 gaborElement geTemp;
00097 theGabors.resize(gaborNumber);
00098 Image<float> giTemp;
00099 giTemp.resize(1,1);
00100 theGaborImages.resize(gaborNumber,giTemp);
00101 theMasterImages.resize(gaborNumber,giTemp);
00102 intermedImages.resize(gaborNumber,giTemp);
00103
00104 LINFO("PLACING gabors");
00105 for(int i = 0; i < gaborNumber; i++)
00106 {
00107 sprintf(getX,"x%d",i+1);
00108 theGabors[i].x = (int)gaborIn.getItemValueF(getX);
00109 sprintf(getY,"y%d",i+1);
00110 theGabors[i].y = (int)gaborIn.getItemValueF(getY);
00111 sprintf(getSTDDEV,"stddev%d",i+1);
00112 theGabors[i].stddev =
00113 gaborIn.getItemValueF(getSTDDEV);
00114 sprintf(getPERIOD,"period%d",i+1);
00115 theGabors[i].period =
00116 gaborIn.getItemValueF(getPERIOD);
00117 sprintf(getPHASE,"phase%d",i+1);
00118 theGabors[i].phase =
00119 gaborIn.getItemValueF(getPHASE);
00120 sprintf(getTHETA,"theta%d",i+1);
00121 theGabors[i].theta =
00122 gaborIn.getItemValueF(getTHETA);
00123 sprintf(getSIGMOD,"sigMod%d",i+1);
00124 theGabors[i].sigMod =
00125 gaborIn.getItemValueF(getSIGMOD);
00126 sprintf(getAMPLITUDE,"amplitude%d",i+1);
00127 theGabors[i].amplitude =
00128 gaborIn.getItemValueF(getAMPLITUDE);
00129
00130
00131
00132 theGabors[i].master = 0;
00133 if(theGabors[i].period > 0.0001F)
00134 theGaborImages[i] = gaborFilter2<float>(theGabors[i].stddev,
00135 theGabors[i].period,
00136 theGabors[i].phase,
00137 theGabors[i].theta,
00138 theGabors[i].sigMod,
00139 theGabors[i].amplitude);
00140 int xx = theGabors[i].x - (theGaborImages[i].getWidth()/2);
00141 int yy = theGabors[i].y - (theGaborImages[i].getHeight()/2);
00142 intermedImages[i].resize(sizeX,sizeY,ZEROS);
00143
00144 LINFO("Pasting image %d at %d,%d with b %f",i,xx,yy,backGround);
00145 if(i == 0)
00146 {
00147 theGaborImages[0] += 128;
00148 intermedImages[0] += 128;
00149
00150 }
00151 inplacePaste(intermedImages[i], theGaborImages[i],
00152 Point2D<int>(xx,yy));
00153
00154
00155 }
00156
00157 finalImage = intermedImages[0];
00158
00159 for(int i = 1; i < gaborNumber; i++)
00160 {
00161
00162 finalImage += intermedImages[i];
00163 }
00164
00165
00166
00167 convert = finalImage;
00168 Raster::WriteGray(convert,sformat("%s/%s.pgm",saveDir,imageSaveName));
00169
00170 convert = masterImage;
00171 Raster::WriteGray(convert,sformat("%s/%s.master.pgm",saveDir,imageSaveName));
00172 (void) time(&t2);
00173 long int tl = (long int) t2-t1;
00174 printf("\n*************************************\n");
00175 printf("Time to execute, %ld seconds\n",tl);
00176 printf("*************************************\n\n");
00177
00178 return 1;
00179 }
00180
00181
00182
00183
00184
00185