app-comparefixationmaps.C
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "Image/Image.H"
00037 #include "Image/ShapeOps.H"
00038 #include "Image/MathOps.H"
00039 #include "Image/Pixels.H"
00040 #include "Raster/Raster.H"
00041 #include "Image/Convolutions.H"
00042 #include "Image/Kernels.H"
00043 #include "GUI/XWindow.H"
00044
00045 #include <vector>
00046 #include <fstream>
00047 #include <algorithm>
00048
00049 #define RANDITER 10000
00050 #define DISPLAY 0
00051 #define STD9 1.4364
00052
00053
00054 int main(int argc, char** argv)
00055 {
00056
00057 const float blur1 = 1.5F*12.7F;
00058 const float blur2 = 1.5F*10.19F;
00059
00060 srand(time(0));
00061
00062
00063 std::vector<Point2D<int> > randPoints;
00064 std::vector<uint> gind;
00065 uint count = 0;
00066 for (int ii=1; ii < argc-1; ii++){
00067 std::ifstream *itsRandFile = new std::ifstream(argv[ii]);
00068 if (itsRandFile->is_open() == false)
00069 LFATAL("Cannot open '%s' for reading", argv[ii]);
00070 else {
00071 while (!itsRandFile->eof())
00072 {
00073 Point2D<int> pr;
00074 (*itsRandFile) >> pr.i >> pr.j;
00075 randPoints.push_back(pr);
00076 count++;
00077 }
00078 randPoints.pop_back();
00079 gind.push_back(count - 1);
00080 itsRandFile->close();
00081 delete itsRandFile;
00082 }
00083 }
00084
00085
00086 Dims dispdims(640*2,480);
00087 XWindow *prevwin;
00088 if (DISPLAY)
00089 prevwin = new XWindow(dispdims, 0, 0, "Preview");
00090
00091
00092 std::ofstream *itsOutFile = new std::ofstream(argv[argc-1]);
00093 if (itsOutFile->is_open() == false)
00094 LFATAL("Cannot open '%s' for reading",argv[argc-1]);
00095
00096
00097
00098 float data[RANDITER];
00099 for (uint ii = 0; ii < RANDITER; ii++){
00100
00101 std::vector< Point2D<int> > rshuffle = randPoints;
00102 if (ii < RANDITER-1)
00103 std::random_shuffle(rshuffle.begin(),rshuffle.end());
00104
00105 Image<float> im1(640,480,ZEROS);
00106 Image<float> im2(640,480,ZEROS);
00107
00108 for (uint jj=0; jj < gind[0]; jj++){
00109 im1.setVal(rshuffle[jj].i,
00110 rshuffle[jj].j,
00111 im1.getVal(rshuffle[jj].i,rshuffle[jj].j)+1.0F);
00112 }
00113
00114 for (uint jj=gind[0]; jj < randPoints.size(); jj++){
00115 im2.setVal(rshuffle[jj].i,
00116 rshuffle[jj].j,
00117 im2.getVal(rshuffle[jj].i,rshuffle[jj].j)+1.0F);
00118 }
00119
00120
00121
00122
00123 im1 += .00000001;
00124
00125
00126
00127
00128
00129 Image<float> filter1 = gaussian2D<float>(blur1);
00130 filter1 /= sum(filter1);
00131 im1 = convolveHmax(im1,filter1);
00132 im1 /= sum(im1);
00133
00134
00135 im2 += .00000001;
00136
00137
00138 Image<float> filter2 = gaussian2D<float>(blur2);
00139 filter2 /= sum(filter2);
00140 im2 = convolveHmax(im2,filter2);
00141 im2 /= sum(im2);
00142
00143
00144 if (DISPLAY)
00145 {
00146 prevwin->drawImage(im1,0,0);
00147 prevwin->drawImage(im2,640,0);
00148 }
00149
00150
00151 data[ii] = .05F * (sum(im1 * log(im1/im2)) + sum(im2 * log(im2/im1)));
00152 (*itsOutFile) << sformat("%2.6f",data[ii]) << std::endl;
00153 LINFO("%2.6f ",data[ii]);
00154
00155 }
00156 itsOutFile->close();
00157
00158
00159
00160 }
00161
00162
00163
00164
00165
00166