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
00037
00038 #ifndef SCALE_REMOVE_SURPRISE_C_DEFINED
00039 #define SCALE_REMOVE_SURPRISE_C_DEFINED
00040
00041 #include "Surprise/ScaleRemoveSurprise.H"
00042 #include "Image/ColorOps.H"
00043
00044 #define SURPRISE_CONF_PATH "/lab/mundhenk/saliency/etc/"
00045 #define SURPRISE_CONF_FILE "removeSurprise.conf"
00046
00047 template <class FLOAT>
00048 ScaleRemoveSurprise<FLOAT>::ScaleRemoveSurprise(const ushort sizeX,
00049 const ushort sizeY,
00050 const string confFile)
00051 {
00052 const string nc = "null";
00053 string file;
00054
00055
00056
00057 file = confFile;
00058
00059 const string path = SURPRISE_CONF_PATH;
00060
00061 char pathFile[100];
00062
00063 sprintf(pathFile,"%s",file.c_str());
00064 itsReadConfig.openFile(pathFile);
00065
00066
00067 itsAxisBiasX = itsReadConfig.getItemValueF("itsAxisBiasX");
00068 itsAxisBiasY = itsReadConfig.getItemValueF("itsAxisBiasY");
00069 itsAxisBiasZ = itsReadConfig.getItemValueF("itsAxisBiasZ");
00070 itsINBias = itsReadConfig.getItemValueF("itsINbias");
00071 itsDRBias = itsReadConfig.getItemValueF("itsDRbias");
00072 itsFLBias = itsReadConfig.getItemValueF("itsFLbias");
00073 itsGABias = itsReadConfig.getItemValueF("itsGAbias");
00074 itsRGBias = itsReadConfig.getItemValueF("itsRGbias");
00075 itsBYBias = itsReadConfig.getItemValueF("itsBYbias");
00076 itsLambda = itsReadConfig.getItemValueF("itsLambda");
00077 itsStdSize = itsReadConfig.getItemValueF("itsStdSize");
00078 itsZSigma = itsReadConfig.getItemValueF("itsZSigma");
00079 itsUseKalman = itsReadConfig.getItemValueB("itsUseKalman");
00080 itsUseMaxLevel = itsReadConfig.getItemValueB("itsUseMaxLevel");
00081 itsH1bias = itsReadConfig.getItemValueF("itsH1bias");
00082 itsH2bias = itsReadConfig.getItemValueF("itsH2bias");
00083 itsSbias = itsReadConfig.getItemValueF("itsSbias");
00084 itsVbias = itsReadConfig.getItemValueF("itsVbias");
00085
00086 itsBaseFilterSize = (ushort)itsReadConfig.getItemValueF("itsBaseFilterSize");
00087
00088
00089 itsLevMin = (ushort)itsReadConfig.getItemValueF("itsLevMin");
00090 itsLevMax = (ushort)itsReadConfig.getItemValueF("itsLevMax");
00091 itsDelMin = (ushort)itsReadConfig.getItemValueF("itsDelMin");
00092 itsDelMax = (ushort)itsReadConfig.getItemValueF("itsDelMax");
00093 itsMapLevel = (ushort)itsReadConfig.getItemValueF("itsMapLevel");
00094 itsMaxIndex = (ushort)itsReadConfig.getItemValueF("itsMaxIndex");
00095 itsMaxDepth = (ushort)itsReadConfig.getItemValueF("itsMaxDepth");
00096
00097 itsScaleBias.resize(itsMaxIndex,0.0F);
00098
00099 std::string baseScale = "itsScaleBias_";
00100
00101
00102 for(ushort i = 0; i < itsMaxIndex; i++)
00103 {
00104 char temp[100];
00105 sprintf(temp,"%s%d",baseScale.c_str(),i);
00106 itsScaleBias[i] = itsReadConfig.getItemValueF(static_cast<string>(temp));
00107 }
00108
00109 itsScalePower.resize(itsMaxIndex,0.0F);
00110 baseScale = "itsScalePower_";
00111
00112
00113 for(ushort i = 0; i < itsMaxIndex; i++)
00114 {
00115 char temp[100];
00116 sprintf(temp,"%s%d",baseScale.c_str(),i);
00117 itsScalePower[i] = itsReadConfig.getItemValueF(static_cast<string>(temp));
00118 }
00119
00120 itsDesatBias.resize(itsMaxIndex,0.0F);
00121 baseScale = "itsDesatBias_";
00122
00123
00124 for(ushort i = 0; i < itsMaxIndex; i++)
00125 {
00126 char temp[100];
00127 sprintf(temp,"%s%d",baseScale.c_str(),i);
00128 itsDesatBias[i] = itsReadConfig.getItemValueF(static_cast<string>(temp));
00129 }
00130
00131 SRSinit(sizeX,sizeY);
00132 }
00133
00134
00135
00136 template <class FLOAT>
00137 ScaleRemoveSurprise<FLOAT>::~ScaleRemoveSurprise()
00138 {}
00139
00140
00141
00142 template <class FLOAT>
00143 void ScaleRemoveSurprise<FLOAT>::SRSinit(const ushort sizeX,
00144 const ushort sizeY)
00145 {
00146 LINFO("INIT");
00147 itsImageSizeX = sizeX;
00148 itsImageSizeY = sizeY;
00149
00150
00151 LINFO("Creating temp object");
00152 RemoveSurprise<PIX_H2SV_TYPE<FLOAT>,PixHyper<FLOAT,6>,FLOAT> tempRS(sizeX,sizeY);
00153 itsRemoveSurprise.resize(itsMaxIndex,tempRS);
00154 itsFinalImage.resize(sizeX,sizeY);
00155
00156 itsImageSizesX.resize(itsMaxIndex,0);
00157 itsImageSizesY.resize(itsMaxIndex,0);
00158 itsFilterSizesX.resize(itsMaxIndex,0);
00159 itsFilterSizesY.resize(itsMaxIndex,0);
00160 itsFilterSizesZ.resize(itsMaxIndex,0);
00161 itsResultImages.resize(itsMaxIndex,itsFinalImage);
00162
00163 itsImageBaseX = itsImageSizeX/(ushort)(pow(2.0F,(FLOAT)itsLevMin));
00164 itsImageBaseY = itsImageSizeY/(ushort)(pow(2.0F,(FLOAT)itsLevMin));
00165
00166 LINFO("Base Image Size %d x %d",itsImageBaseX,itsImageBaseY);
00167
00168 uint indx = 0;
00169
00170
00171
00172 LINFO("Setting up filters");
00173 for(ushort i = 0; i < (itsDelMax - itsDelMin + 1); i++)
00174 {
00175 ushort bx = itsImageBaseX;
00176 ushort by = itsImageBaseY;
00177 FLOAT fz = itsZSigma;
00178 for(ushort j = 0; j < (itsLevMax - itsLevMin + 1); j++)
00179 {
00180 itsImageSizesX[indx] = bx;
00181 itsFilterSizesX[indx] = (ushort)round(((FLOAT)itsBaseFilterSize/
00182 (FLOAT)itsImageSizesX[indx]) *
00183 (FLOAT)itsImageSizeX);
00184 LINFO("%d : Filter Size X %d",indx,itsFilterSizesX[indx]);
00185 itsImageSizesY[indx] = by;
00186 itsFilterSizesY[indx] = (ushort)round(((FLOAT)itsBaseFilterSize/
00187 (FLOAT)itsImageSizesY[indx]) *
00188 (FLOAT)itsImageSizeY);
00189 LINFO("%d : Filter Size Y %d",indx,itsFilterSizesY[indx]);
00190 itsFilterSizesZ[indx] = fz;
00191 LINFO("%d : Filter Size Z %f",indx,itsFilterSizesZ[indx]);
00192 bx = bx/2; by = by/2; fz = fz*2;
00193 indx++;
00194 }
00195 }
00196
00197
00198 for(ushort i = 0; i < itsMaxIndex; i++)
00199 {
00200 LINFO("Setting up RemoveSaliency for scale %d",i);
00201 itsRemoveSurprise[i].RSsetAxisBias(itsAxisBiasX,
00202 itsAxisBiasY,
00203 itsAxisBiasZ);
00204
00205 const FLOAT sigma = itsFilterSizesX[i]/4;
00206 const FLOAT z_sigma = itsFilterSizesZ[i];
00207 LINFO("%d Desat Bias %f",i,itsDesatBias[i]);
00208 itsRemoveSurprise[i].RSsetDesatBias(itsDesatBias[i]);
00209 LINFO("%d Sigma %f Z Sigma %f StdDev %f",i,sigma,z_sigma,itsStdSize);
00210 itsRemoveSurprise[i].RScreateSepFilters(sigma,z_sigma,itsStdSize);
00211 itsRemoveSurprise[i].RSfindConvolutionEndPoints();
00212 LINFO("%d IN Bias %f DR Bias %f FL Bias %f",i,itsINBias,itsDRBias,
00213 itsFLBias);
00214 LINFO("%d GA Bias %f RG Bias %f BY Bias %f",i,itsGABias,itsRGBias,
00215 itsBYBias);
00216 LINFO("%d Scale Power %f",i,itsScalePower[i]);
00217 itsRemoveSurprise[i].RSsetConspicBias(itsINBias * itsScalePower[i],
00218 itsDRBias * itsScalePower[i],
00219 itsFLBias * itsScalePower[i],
00220 itsGABias * itsScalePower[i],
00221 itsRGBias * itsScalePower[i],
00222 itsBYBias * itsScalePower[i]);
00223 LINFO("%d Bias H1 %f H2 %f S %f V %f",i,
00224 itsH1bias,itsH2bias,itsSbias,itsVbias);
00225 itsRemoveSurprise[i].RSsetH2SVBias(itsH1bias,itsH2bias,itsSbias,itsVbias);
00226 itsRemoveSurprise[i].RSuseTrueKalman(false);
00227 itsRemoveSurprise[i].RSuseMaxLevel(itsUseMaxLevel);
00228 LINFO("%d Lambda %f",i,itsLambda);
00229 itsRemoveSurprise[i].RSsetLambda(itsLambda);
00230 }
00231 }
00232
00233
00234
00235 template <class FLOAT>
00236 void ScaleRemoveSurprise<FLOAT>::SRSinputRawImage(
00237 const Image<PixRGB<FLOAT> >& rawImage,
00238 const uint frame)
00239 {
00240 itsRawImage = rawImage;
00241 itsFrame = frame;
00242 }
00243
00244
00245
00246 template <class FLOAT>
00247 void ScaleRemoveSurprise<FLOAT>::SRSinputSalMap(const Image<FLOAT>& salMap)
00248 {
00249 itsSalMap = salMap;
00250 }
00251
00252
00253
00254 template <class FLOAT>
00255 void ScaleRemoveSurprise<FLOAT>::SRSsetAntiWeights()
00256 {
00257 for(ushort i = 0; i < itsMaxIndex; i++)
00258 {
00259 char fileName[100];
00260 FLOAT mean = 0;
00261 int N = 0;
00262
00263 FLOAT mean2 = 0;
00264 int N2 = 0;
00265
00266 sprintf(fileName,"../ANTI/IntensitySurprise.000000.%d.SCSimage.float.pfz",i);
00267 string fnameS = fileName;
00268 const Image<FLOAT> INimage = Raster::ReadFloat(fnameS);
00269
00270 for(int ii = 0; ii < INimage.getWidth(); ii++)
00271 {
00272 for(int j = 0; j < INimage.getHeight(); j++)
00273 {
00274 mean += INimage.getVal(ii,j);
00275 N++;
00276 }
00277 }
00278 FLOAT INmean = (mean/N);
00279 sprintf(fileName,"../BASE/IntensitySurprise.000000.%d.SCSimage.float.pfz",i);
00280 fnameS = fileName;
00281 const Image<FLOAT> INimage2 = Raster::ReadFloat(fnameS);
00282 for(int ii = 0; ii < INimage2.getWidth(); ii++)
00283 {
00284 for(int j = 0; j < INimage2.getHeight(); j++)
00285 {
00286 mean2 += INimage2.getVal(ii,j);
00287 N2++;
00288 }
00289 }
00290 FLOAT INmean2 = (mean2/N2);
00291
00292 mean = 0;
00293 N = 0;
00294 mean2 = 0;
00295 N2 = 0;
00296 sprintf(fileName,"../ANTI/GaborSurprise.000000.%d.SCSimage.float.pfz",i);
00297 fnameS = fileName;
00298 const Image<FLOAT> GAimage = Raster::ReadFloat(fnameS);
00299
00300 for(int ii = 0; ii < GAimage.getWidth(); ii++)
00301 {
00302 for(int j = 0; j < GAimage.getHeight(); j++)
00303 {
00304 mean += GAimage.getVal(ii,j);
00305 N++;
00306 }
00307 }
00308 FLOAT GAmean = (mean/N);
00309 sprintf(fileName,"../BASE/GaborSurprise.000000.%d.SCSimage.float.pfz",i);
00310 fnameS = fileName;
00311 const Image<FLOAT> GAimage2 = Raster::ReadFloat(fnameS);
00312
00313 for(int ii = 0; ii < GAimage2.getWidth(); ii++)
00314 {
00315 for(int j = 0; j < GAimage2.getHeight(); j++)
00316 {
00317 mean2 += GAimage2.getVal(ii,j);
00318 N2++;
00319 }
00320 }
00321 FLOAT GAmean2 = (mean2/N2);
00322
00323 mean = 0;
00324 N = 0;
00325 mean2 = 0;
00326 N2 = 0;
00327 sprintf(fileName,"../ANTI/RedGreenSurprise.000000.%d.SCSimage.float.pfz",i);
00328 fnameS = fileName;
00329 const Image<FLOAT> RGimage = Raster::ReadFloat(fnameS);
00330
00331 for(int ii = 0; ii < RGimage.getWidth(); ii++)
00332 {
00333 for(int j = 0; j < RGimage.getHeight(); j++)
00334 {
00335 mean += RGimage.getVal(ii,j);
00336 N++;
00337 }
00338 }
00339 FLOAT RGmean = (mean/N);
00340 sprintf(fileName,"../BASE/RedGreenSurprise.000000.%d.SCSimage.float.pfz",i);
00341 fnameS = fileName;
00342 const Image<FLOAT> RGimage2 = Raster::ReadFloat(fnameS);
00343
00344 for(int ii = 0; ii < RGimage2.getWidth(); ii++)
00345 {
00346 for(int j = 0; j < RGimage2.getHeight(); j++)
00347 {
00348 mean2 += RGimage2.getVal(ii,j);
00349 N2++;
00350 }
00351 }
00352 FLOAT RGmean2 = (mean2/N2);
00353
00354 mean = 0;
00355 N = 0;
00356 mean2 = 0;
00357 N2 = 0;
00358 sprintf(fileName,"../ANTI/BlueYellowSurprise.000000.%d.SCSimage.float.pfz",i);
00359 fnameS = fileName;
00360 const Image<FLOAT> BYimage = Raster::ReadFloat(fnameS);
00361
00362 for(int ii = 0; ii < BYimage.getWidth(); ii++)
00363 {
00364 for(int j = 0; j < BYimage.getHeight(); j++)
00365 {
00366 mean += BYimage.getVal(ii,j);
00367 N++;
00368 }
00369 }
00370 FLOAT BYmean = (mean/N);
00371 sprintf(fileName,"../BASE/BlueYellowSurprise.000000.%d.SCSimage.float.pfz",i);
00372 fnameS = fileName;
00373 const Image<FLOAT> BYimage2 = Raster::ReadFloat(fnameS);
00374
00375 for(int ii = 0; ii < BYimage2.getWidth(); ii++)
00376 {
00377 for(int j = 0; j < BYimage2.getHeight(); j++)
00378 {
00379 mean2 += BYimage2.getVal(ii,j);
00380 N2++;
00381 }
00382 }
00383 FLOAT BYmean2 = (mean2/N2);
00384
00385 FLOAT norm = INmean + GAmean + RGmean + BYmean;
00386 FLOAT norm2 = INmean2 + GAmean2 + RGmean2 + BYmean2;
00387
00388 INmean = (INmean/norm) * 4; GAmean = (GAmean/norm) * 4;
00389 RGmean = (RGmean/norm) * 4; RGmean = (BYmean/norm) * 4;
00390
00391 INmean2 = (INmean2/norm2) * 4; GAmean2 = (GAmean2/norm2) * 4;
00392 RGmean2 = (RGmean2/norm2) * 4; BYmean2 = (BYmean2/norm2) * 4;
00393
00394 LINFO("%d Old RG val %f",i,itsRGBias);
00395 LINFO("Base Mean %f Anti Mean %f",RGmean2,RGmean);
00396 const FLOAT itsNewRGBias = itsRGBias * (RGmean2/RGmean);
00397 LINFO("%d New RG val %f",i,itsNewRGBias);
00398
00399 LINFO("%d Old BY val %f",i,itsBYBias);
00400 LINFO("Base Mean %f Anti Mean %f",BYmean2,BYmean);
00401 const FLOAT itsNewBYBias = itsBYBias * (BYmean2/BYmean);
00402 LINFO("%d New BY val %f",i,itsNewBYBias);
00403
00404 LINFO("%d Old GA val %f",i,itsGABias);
00405 LINFO("Base Mean %f Anti Mean %f",GAmean2,GAmean);
00406 const FLOAT itsNewGABias = itsGABias * (GAmean2/GAmean);
00407 LINFO("%d New GA val %f",i,itsNewGABias);
00408
00409 LINFO("%d Old IN val %f",i,itsINBias);
00410 LINFO("Base Mean %f Anti Mean %f",INmean2,INmean);
00411 const FLOAT itsNewINBias = itsINBias * (INmean2/INmean);
00412 LINFO("%d New IN val %f",i,itsNewINBias);
00413
00414 const FLOAT itsNewDRBias = itsDRBias;
00415 const FLOAT itsNewFLBias = itsFLBias;
00416
00417 itsRemoveSurprise[i].RSsetConspicBias(itsNewINBias * itsScalePower[i],
00418 itsNewDRBias * itsScalePower[i],
00419 itsNewFLBias * itsScalePower[i],
00420 itsNewGABias * itsScalePower[i],
00421 itsNewRGBias * itsScalePower[i],
00422 itsNewBYBias * itsScalePower[i]);
00423 }
00424 }
00425
00426
00427
00428 template <class FLOAT>
00429 void ScaleRemoveSurprise<FLOAT>::SRSsetAntiWeightsInteract(const uint aframes,
00430 const uint bframes)
00431 {
00432 for(ushort i = 0; i < itsMaxIndex; i++)
00433 {
00434 char fileName[100];
00435 std::vector<bool> active(6,true);
00436 std::vector<FLOAT> blankVec(6,0.0);
00437 std::vector<FLOAT> MEAN(6,1.0);
00438 std::vector<FLOAT> MEAN2(6,1.0);
00439 std::vector<FLOAT> STD(6,1.0);
00440 std::vector<FLOAT> STD2(6,1.0);
00441 std::vector<std::vector<FLOAT> > COR(6,blankVec);
00442 std::vector<std::vector<FLOAT> > COR2(6,blankVec);
00443
00444 Image<FLOAT> blank;
00445 std::vector<Image<FLOAT> > INimage(aframes,blank);
00446 std::vector<Image<FLOAT> > GAimage(aframes,blank);
00447 std::vector<Image<FLOAT> > RGimage(aframes,blank);
00448 std::vector<Image<FLOAT> > BYimage(aframes,blank);
00449
00450 std::vector<Image<FLOAT> > INimage2(bframes,blank);
00451 std::vector<Image<FLOAT> > GAimage2(bframes,blank);
00452 std::vector<Image<FLOAT> > RGimage2(bframes,blank);
00453 std::vector<Image<FLOAT> > BYimage2(bframes,blank);
00454
00455 FLOAT N = 0, N2 = 0;
00456 FLOAT Norm = 0, Norm2 = 0;
00457 FLOAT INmean = 0, GAmean = 0, RGmean = 0, BYmean = 0;
00458 FLOAT INmean2 = 0, GAmean2 = 0, RGmean2 = 0, BYmean2 = 0;
00459 FLOAT INss = 0, GAss = 0, RGss = 0, BYss = 0;
00460 FLOAT INss2 = 0, GAss2 = 0, RGss2 = 0, BYss2 = 0;
00461
00462 for(uint t = 0; t < aframes; t++)
00463 {
00464 int frameNumber = (int)t;
00465 char c[100];
00466 if(frameNumber < 10)
00467 sprintf(c,"00000%d",frameNumber);
00468 else if(frameNumber < 100)
00469 sprintf(c,"0000%d",frameNumber);
00470 else if(frameNumber < 1000)
00471 sprintf(c,"000%d",frameNumber);
00472 else if(frameNumber < 10000)
00473 sprintf(c,"00%d",frameNumber);
00474 else if(frameNumber < 100000)
00475 sprintf(c,"0%d",frameNumber);
00476 else
00477 sprintf(c,"%d",frameNumber);
00478 sprintf(fileName,"../ANTI/IntensitySurprise.%s.%d.SCSimage.float.pfz"
00479 ,c,i);
00480 string fnameS = fileName;
00481 INimage[t] = Raster::ReadFloat(fnameS);
00482
00483 sprintf(fileName,"../ANTI/GaborSurprise.%s.%d.SCSimage.float.pfz"
00484 ,c,i);
00485 fnameS = fileName;
00486 GAimage[t] = Raster::ReadFloat(fnameS);
00487
00488 sprintf(fileName,"../ANTI/RedGreenSurprise.%s.%d.SCSimage.float.pfz"
00489 ,c,i);
00490 fnameS = fileName;
00491 RGimage[t] = Raster::ReadFloat(fnameS);
00492
00493
00494 sprintf(fileName,"../ANTI/BlueYellowSurprise.%s.%d.SCSimage.float.pfz"
00495 ,c,i);
00496 fnameS = fileName;
00497 BYimage[t] = Raster::ReadFloat(fnameS);
00498
00499 }
00500
00501 for(uint t = 0; t < bframes; t++)
00502 {
00503 int frameNumber = (int)t;
00504 char c[100];
00505 if(frameNumber < 10)
00506 sprintf(c,"00000%d",frameNumber);
00507 else if(frameNumber < 100)
00508 sprintf(c,"0000%d",frameNumber);
00509 else if(frameNumber < 1000)
00510 sprintf(c,"000%d",frameNumber);
00511 else if(frameNumber < 10000)
00512 sprintf(c,"00%d",frameNumber);
00513 else if(frameNumber < 100000)
00514 sprintf(c,"0%d",frameNumber);
00515 else
00516 sprintf(c,"%d",frameNumber);
00517
00518 sprintf(fileName,"../BASE/IntensitySurprise.%s.%d.SCSimage.float.pfz"
00519 ,c,i);
00520 string fnameS = fileName;
00521 INimage2[t] = Raster::ReadFloat(fnameS);
00522
00523 sprintf(fileName,"../BASE/GaborSurprise.%s.%d.SCSimage.float.pfz"
00524 ,c,i);
00525 fnameS = fileName;
00526 GAimage2[t] = Raster::ReadFloat(fnameS);
00527
00528 sprintf(fileName,"../BASE/RedGreenSurprise.%s.%d.SCSimage.float.pfz"
00529 ,c,i);
00530 fnameS = fileName;
00531 RGimage2[t] = Raster::ReadFloat(fnameS);
00532
00533 sprintf(fileName,"../BASE/BlueYellowSurprise.%s.%d.SCSimage.float.pfz"
00534 ,c,i);
00535 fnameS = fileName;
00536 BYimage2[t] = Raster::ReadFloat(fnameS);
00537 }
00538
00539 active[1] = false; active[2] = false;
00540
00541 for(uint t = 0; t < bframes; t++)
00542 {
00543 for(int ii = 0; ii < BYimage2[t].getWidth(); ii++)
00544 {
00545 for(int jj = 0; jj < BYimage2[t].getHeight(); jj++)
00546 {
00547 INmean2 += INimage2[t].getVal(ii,jj);
00548 INss2 += pow(INimage2[t].getVal(ii,jj),2);
00549
00550 GAmean2 += GAimage2[t].getVal(ii,jj);
00551 GAss2 += pow(GAimage2[t].getVal(ii,jj),2);
00552
00553 RGmean2 += RGimage2[t].getVal(ii,jj);
00554 RGss2 += pow(RGimage2[t].getVal(ii,jj),2);
00555
00556 BYmean2 += BYimage2[t].getVal(ii,jj);
00557 BYss2 += pow(BYimage2[t].getVal(ii,jj),2);
00558 N2++;
00559 }
00560 }
00561 }
00562 INmean2 = INmean2/N2; GAmean2 = GAmean2/N2;
00563 RGmean2 = RGmean2/N2; BYmean2 = BYmean2/N2;
00564 MEAN2[0] = INmean2; MEAN2[3] = GAmean2;
00565 MEAN2[4] = RGmean2; MEAN2[5] = BYmean2;
00566 STD2[0] = sqrt(INss2/N2 - pow(INmean2,2));
00567 STD2[3] = sqrt(GAss2/N2 - pow(GAmean2,2));
00568 STD2[4] = sqrt(RGss2/N2 - pow(RGmean2,2));
00569 STD2[5] = sqrt(BYss2/N2 - pow(BYmean2,2));
00570
00571 for(uint t = 0; t < aframes; t++)
00572 {
00573 for(int ii = 0; ii < BYimage[t].getWidth(); ii++)
00574 {
00575 for(int jj = 0; jj < BYimage[t].getHeight(); jj++)
00576 {
00577 INmean += INimage[t].getVal(ii,jj);
00578 INss += pow(INimage[t].getVal(ii,jj),2);
00579
00580 GAmean += GAimage[t].getVal(ii,jj);
00581 GAss += pow(GAimage[t].getVal(ii,jj),2);
00582
00583 RGmean += RGimage[t].getVal(ii,jj);
00584 RGss += pow(RGimage[t].getVal(ii,jj),2);
00585
00586 BYmean += BYimage[t].getVal(ii,jj);
00587 BYss += pow(BYimage[t].getVal(ii,jj),2);
00588 N++;
00589 }
00590 }
00591 }
00592
00593 INmean = INmean/N; GAmean = GAmean/N;
00594 RGmean = RGmean/N; BYmean = BYmean/N;
00595 MEAN[0] = INmean; MEAN[3] = GAmean;
00596 MEAN[4] = RGmean; MEAN[5] = BYmean;
00597 STD[0] = sqrt(INss/N - pow(INmean,2));
00598 STD[3] = sqrt(GAss/N - pow(GAmean,2));
00599 STD[4] = sqrt(RGss/N - pow(RGmean,2));
00600 STD[5] = sqrt(BYss/N - pow(BYmean,2));
00601
00602 for(uint t = 0; t < bframes; t++)
00603 {
00604 for(int ii = 0; ii < BYimage2[t].getWidth(); ii++)
00605 {
00606 for(int jj = 0; jj < BYimage2[t].getHeight(); jj++)
00607 {
00608 COR2[0][0] += pow(INimage2[t].getVal(ii,jj),2);
00609 COR2[0][1] = 0;
00610 COR2[0][2] = 0;
00611 COR2[0][3] += INimage2[t].getVal(ii,jj)*GAimage2[t].getVal(ii,jj);
00612 COR2[0][4] += INimage2[t].getVal(ii,jj)*RGimage2[t].getVal(ii,jj);
00613 COR2[0][5] += INimage2[t].getVal(ii,jj)*BYimage2[t].getVal(ii,jj);
00614
00615 COR2[1][0] = 0;
00616 COR2[1][1] = 0;
00617 COR2[1][2] = 0;
00618 COR2[1][3] = 0;
00619 COR2[1][4] = 0;
00620 COR2[1][5] = 0;
00621
00622 COR2[2][0] = 0;
00623 COR2[2][1] = 0;
00624 COR2[2][2] = 0;
00625 COR2[2][3] = 0;
00626 COR2[2][4] = 0;
00627 COR2[2][5] = 0;
00628
00629 COR2[3][0] += GAimage2[t].getVal(ii,jj)*INimage2[t].getVal(ii,jj);
00630 COR2[3][1] = 0;
00631 COR2[3][2] = 0;
00632 COR2[3][3] += pow(GAimage2[t].getVal(ii,jj),2);
00633 COR2[3][4] += GAimage2[t].getVal(ii,jj)*RGimage2[t].getVal(ii,jj);
00634 COR2[3][5] += GAimage2[t].getVal(ii,jj)*BYimage2[t].getVal(ii,jj);
00635
00636 COR2[4][0] += RGimage2[t].getVal(ii,jj)*INimage2[t].getVal(ii,jj);
00637 COR2[4][1] = 0;
00638 COR2[4][2] = 0;
00639 COR2[4][3] += RGimage2[t].getVal(ii,jj)*GAimage2[t].getVal(ii,jj);
00640 COR2[4][4] += pow(RGimage2[t].getVal(ii,jj),2);
00641 COR2[4][5] += RGimage2[t].getVal(ii,jj)*BYimage2[t].getVal(ii,jj);
00642
00643 COR2[5][0] += BYimage2[t].getVal(ii,jj)*INimage2[t].getVal(ii,jj);
00644 COR2[5][1] = 0;
00645 COR2[5][2] = 0;
00646 COR2[5][3] += BYimage2[t].getVal(ii,jj)*GAimage2[t].getVal(ii,jj);
00647 COR2[5][4] += BYimage2[t].getVal(ii,jj)*RGimage2[t].getVal(ii,jj);
00648 COR2[5][5] += pow(BYimage2[t].getVal(ii,jj),2);
00649 }
00650 }
00651 }
00652 for(uint t = 0; t < aframes; t++)
00653 {
00654 for(int ii = 0; ii < BYimage[t].getWidth(); ii++)
00655 {
00656 for(int jj = 0; jj < BYimage[t].getHeight(); jj++)
00657 {
00658 COR[0][0] += pow(INimage[t].getVal(ii,jj),2);
00659 COR[0][1] = 0;
00660 COR[0][2] = 0;
00661 COR[0][3] += INimage[t].getVal(ii,jj)*GAimage[t].getVal(ii,jj);
00662 COR[0][4] += INimage[t].getVal(ii,jj)*RGimage[t].getVal(ii,jj);
00663 COR[0][5] += INimage[t].getVal(ii,jj)*BYimage[t].getVal(ii,jj);
00664
00665 COR[1][0] = 0;
00666 COR[1][1] = 0;
00667 COR[1][2] = 0;
00668 COR[1][3] = 0;
00669 COR[1][4] = 0;
00670 COR[1][5] = 0;
00671
00672 COR[2][0] = 0;
00673 COR[2][1] = 0;
00674 COR[2][2] = 0;
00675 COR[2][3] = 0;
00676 COR[2][4] = 0;
00677 COR[2][5] = 0;
00678
00679 COR[3][0] += GAimage[t].getVal(ii,jj)*INimage[t].getVal(ii,jj);
00680 COR[3][1] = 0;
00681 COR[3][2] = 0;
00682 COR[3][3] += pow(GAimage[t].getVal(ii,jj),2);
00683 COR[3][4] += GAimage[t].getVal(ii,jj)*RGimage[t].getVal(ii,jj);
00684 COR[3][5] += GAimage[t].getVal(ii,jj)*BYimage[t].getVal(ii,jj);
00685
00686 COR[4][0] += RGimage[t].getVal(ii,jj)*INimage[t].getVal(ii,jj);
00687 COR[4][1] = 0;
00688 COR[4][2] = 0;
00689 COR[4][3] += RGimage[t].getVal(ii,jj)*GAimage[t].getVal(ii,jj);
00690 COR[4][4] += pow(RGimage[t].getVal(ii,jj),2);
00691 COR[4][5] += RGimage[t].getVal(ii,jj)*BYimage[t].getVal(ii,jj);
00692
00693 COR[5][0] += BYimage[t].getVal(ii,jj)*INimage[t].getVal(ii,jj);
00694 COR[5][1] = 0;
00695 COR[5][2] = 0;
00696 COR[5][3] += BYimage[t].getVal(ii,jj)*GAimage[t].getVal(ii,jj);
00697 COR[5][4] += BYimage[t].getVal(ii,jj)*RGimage[t].getVal(ii,jj);
00698 COR[5][5] += pow(BYimage[t].getVal(ii,jj),2);
00699 }
00700 }
00701 }
00702
00703 for(int ii = 0; ii < 6; ii++)
00704 {
00705 if(active[ii])
00706 {
00707 for(int jj = 0; jj < 6; jj++)
00708 {
00709 if(active[jj])
00710 {
00711
00712
00713
00714
00715 COR[ii][jj] = (((COR[ii][jj]/N) - (MEAN[ii]*MEAN[jj]))/
00716 (STD[ii]*STD[jj])) * MEAN[ii];
00717 Norm += fabs(COR[ii][jj]);
00718
00719
00720
00721
00722
00723 COR2[ii][jj] = (((COR2[ii][jj]/N2) - (MEAN2[ii]*MEAN2[jj]))/
00724 (STD2[ii]*STD2[jj])) * MEAN2[ii];
00725 Norm2 += fabs(COR2[ii][jj]);
00726 }
00727 }
00728 }
00729 }
00730
00731 FLOAT max = 0;
00732 FLOAT min = 10;
00733 FLOAT max2 = 0;
00734 FLOAT min2 = 10;
00735
00736
00737 for(int ii = 0; ii < 6; ii++)
00738 {
00739 if(active[ii])
00740 {
00741 for(int jj = 0; jj < 6; jj++)
00742 {
00743 if(active[jj])
00744 {
00745 COR[ii][jj] = COR[ii][jj]/Norm;
00746
00747 if(COR[ii][jj] > max)
00748 max = COR[ii][jj];
00749 if(COR[ii][jj] < min)
00750 min = COR[ii][jj];
00751
00752 COR2[ii][jj] = COR2[ii][jj]/Norm2;
00753
00754 if(COR2[ii][jj] > max2)
00755 max2 = COR2[ii][jj];
00756 if(COR2[ii][jj] < min2)
00757 min2 = COR2[ii][jj];
00758 }
00759 }
00760 }
00761 }
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781 COR2[1][1] = 1;
00782 COR2[2][2] = 1;
00783 COR[1][1] = 1;
00784 COR[2][2] = 1;
00785
00786 LINFO("Correlation Base Biasing Matrix");
00787 for(int ii = 0; ii < 6; ii++)
00788 {
00789 for(int jj = 0; jj < 6; jj++)
00790 {
00791 std::cerr << COR2[ii][jj] << "\t";
00792 }
00793 std::cerr << "\n";
00794 }
00795
00796 LINFO("Correlation Anti Biasing Matrix");
00797 for(int ii = 0; ii < 6; ii++)
00798 {
00799 for(int jj = 0; jj < 6; jj++)
00800 {
00801 std::cerr << COR[ii][jj] << "\t";
00802 }
00803 std::cerr << "\n";
00804 }
00805
00806 itsRemoveSurprise[i].RSsetCorrWeightMat(COR,COR2);
00807 }
00808 }
00809
00810
00811
00812 template <class FLOAT>
00813 void ScaleRemoveSurprise<FLOAT>::SRScomputeBayesFeatureBias(
00814 const uint frames,
00815 const string baseFileNamePrefix,
00816 const string antiFileNamePrefix)
00817 {
00818 const uint maps = itsLevMax + itsDelMax;
00819 const uint features = 7;
00820 const uint featureDims = maps * features;
00821
00822 Image<FLOAT> baseImage;
00823 std::vector<Image<FLOAT> > baseVec(featureDims,baseImage);
00824 std::vector<std::vector<Image<FLOAT> > > imageSetBase(frames,baseVec);
00825 std::vector<std::vector<Image<FLOAT> > > imageSetAnti(frames,baseVec);
00826
00827 string dash = "-";
00828 string dot = ".";
00829 string ftype = ".pnm";
00830 string ANTI = "../ANTI/";
00831 string BASE = "../BASE/";
00832 string basePrefix = BASE + baseFileNamePrefix;
00833 string antiPrefix = ANTI + antiFileNamePrefix;
00834
00835 for(uint i = 0; i < frames; i++)
00836 {
00837 uint fnum = 0;
00838
00839 char frameChar[100];
00840 const uint itsFrame = i;
00841
00842 if(itsFrame < 10)
00843 sprintf(frameChar,"00000%d",itsFrame);
00844 else if(itsFrame < 100)
00845 sprintf(frameChar,"0000%d",itsFrame);
00846 else if(itsFrame < 1000)
00847 sprintf(frameChar,"000%d",itsFrame);
00848 else if(itsFrame < 10000)
00849 sprintf(frameChar,"00%d",itsFrame);
00850 else if(itsFrame < 100000)
00851 sprintf(frameChar,"0%d",itsFrame);
00852 else
00853 sprintf(frameChar,"%d",itsFrame);
00854
00855 string feature = "SRby";
00856 string fenameB = basePrefix + dash + feature + dash;
00857 string fenameA = antiPrefix + dash + feature + dash;
00858 for(uint j = 0; j < maps; j++)
00859 {
00860 char cmap[10]; sprintf(cmap,"%d",j);
00861 string file = fenameB + cmap + dash + frameChar + ftype;
00862 imageSetBase[i][fnum] = Raster::ReadGray(file);
00863 file = fenameA + cmap + dash + frameChar + ftype;
00864 imageSetAnti[i][fnum] = Raster::ReadGray(file);
00865 fnum++;
00866 }
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933 feature = "SRintensity";
00934 fenameB = basePrefix + dash + feature + dash;
00935 fenameA = antiPrefix + dash + feature + dash;
00936 for(uint j = 0; j < maps; j++)
00937 {
00938 char cmap[10]; sprintf(cmap,"%d",j);
00939 string file = fenameB + cmap + dash + frameChar + ftype;
00940 imageSetBase[i][fnum] = Raster::ReadGray(file);
00941 file = fenameA + cmap + dash + frameChar + ftype;
00942 imageSetAnti[i][fnum] = Raster::ReadGray(file);
00943 fnum++;
00944 }
00945
00946 feature = "SRori_0";
00947 fenameB = basePrefix + dash + feature + dash;
00948 fenameA = antiPrefix + dash + feature + dash;
00949 for(uint j = 0; j < maps; j++)
00950 {
00951 char cmap[10]; sprintf(cmap,"%d",j);
00952 string file = fenameB + cmap + dash + frameChar + ftype;
00953 imageSetBase[i][fnum] = Raster::ReadGray(file);
00954 file = fenameA + cmap + dash + frameChar + ftype;
00955 imageSetAnti[i][fnum] = Raster::ReadGray(file);
00956 fnum++;
00957 }
00958
00959 feature = "SRori_1";
00960 fenameB = basePrefix + dash + feature + dash;
00961 fenameA = antiPrefix + dash + feature + dash;
00962 for(uint j = 0; j < maps; j++)
00963 {
00964 char cmap[10]; sprintf(cmap,"%d",j);
00965 string file = fenameB + cmap + dash + frameChar + ftype;
00966 imageSetBase[i][fnum] = Raster::ReadGray(file);
00967 file = fenameA + cmap + dash + frameChar + ftype;
00968 imageSetAnti[i][fnum] = Raster::ReadGray(file);
00969 fnum++;
00970 }
00971
00972 feature = "SRori_2";
00973 fenameB = basePrefix + dash + feature + dash;
00974 fenameA = antiPrefix + dash + feature + dash;
00975 for(uint j = 0; j < maps; j++)
00976 {
00977 char cmap[10]; sprintf(cmap,"%d",j);
00978 string file = fenameB + cmap + dash + frameChar + ftype;
00979 imageSetBase[i][fnum] = Raster::ReadGray(file);
00980 file = fenameA + cmap + dash + frameChar + ftype;
00981 imageSetAnti[i][fnum] = Raster::ReadGray(file);
00982 fnum++;
00983 }
00984
00985 feature = "SRori_3";
00986 fenameB = basePrefix + dash + feature + dash;
00987 fenameA = antiPrefix + dash + feature + dash;
00988 for(uint j = 0; j < maps; j++)
00989 {
00990 char cmap[10]; sprintf(cmap,"%d",j);
00991 string file = fenameB + cmap + dash + frameChar + ftype;
00992 imageSetBase[i][fnum] = Raster::ReadGray(file);
00993 file = fenameA + cmap + dash + frameChar + ftype;
00994 imageSetAnti[i][fnum] = Raster::ReadGray(file);
00995 fnum++;
00996 }
00997
00998 feature = "SRrg";
00999 fenameB = basePrefix + dash + feature + dash;
01000 fenameA = antiPrefix + dash + feature + dash;
01001 for(uint j = 0; j < maps; j++)
01002 {
01003 char cmap[10]; sprintf(cmap,"%d",j);
01004 string file = fenameB + cmap + dash + frameChar + ftype;
01005 imageSetBase[i][fnum] = Raster::ReadGray(file);
01006 file = fenameA + cmap + dash + frameChar + ftype;
01007 imageSetAnti[i][fnum] = Raster::ReadGray(file);
01008 fnum++;
01009 }
01010 }
01011
01012 string base = "base";
01013 string anti = "anti";
01014
01015 LINFO("RUNNING: corrEigenMatrix");
01016 corrEigenMatrix(imageSetBase,itsBaseCorr,itsBaseMean,itsBaseSTD,itsBaseSS,
01017 itsBaseN,false);
01018
01019 LINFO("****************************************************");
01020 LINFO("BaseCorr");
01021
01022 for(uint i = 0; i < (uint)itsBaseCorr.getWidth(); i++)
01023 {
01024 for(uint j = 0; j < (uint)itsBaseCorr.getHeight(); j++)
01025 {
01026 std::cerr << itsBaseCorr.getVal(i,j) << "\t";
01027 }
01028 std::cerr << "\n";
01029 }
01030
01031 itsBaseR = getPearsonRMatrix(itsBaseCorr,itsBaseSTD);
01032
01033 for(uint i = 0; i < (uint)itsBaseR.getWidth(); i++)
01034 {
01035 for(uint j = 0; j < (uint)itsBaseR.getHeight(); j++)
01036 {
01037 std::cerr << itsBaseR.getVal(i,j) << "\t";
01038 }
01039 std::cerr << "\n";
01040 }
01041
01042 LINFO("****************************************************");
01043 LINFO("BaseMean");
01044 for(uint i = 0; i < (uint)itsBaseMean.getWidth(); i++)
01045 {
01046 for(uint j = 0; j < (uint)itsBaseMean.getHeight(); j++)
01047 {
01048 std::cerr << itsBaseMean.getVal(i,j) << "\t";
01049 }
01050 std::cerr << "\n";
01051 }
01052
01053 LINFO("****************************************************");
01054 LINFO("BaseSTD");
01055 for(uint i = 0; i < (uint)itsBaseSTD.getWidth(); i++)
01056 {
01057 for(uint j = 0; j < (uint)itsBaseSTD.getHeight(); j++)
01058 {
01059 std::cerr << itsBaseSTD.getVal(i,j) << "\t";
01060 }
01061 std::cerr << "\n";
01062 }
01063
01064
01065 LINFO("****************************************************");
01066 LINFO("BaseSS");
01067 for(uint i = 0; i < (uint)itsBaseSS.getWidth(); i++)
01068 {
01069 for(uint j = 0; j < (uint)itsBaseSS.getHeight(); j++)
01070 {
01071 std::cerr << itsBaseSS.getVal(i,j) << "\t";
01072 }
01073 std::cerr << "\n";
01074 }
01075
01076 string type = "corr.pfz";
01077 string filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01078 Raster::WriteFloat(itsBaseCorr,FLOAT_NORM_PRESERVE,filenamePFZ);
01079 type = "mean.pfz";
01080 filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01081 Raster::WriteFloat(itsBaseMean,FLOAT_NORM_PRESERVE,filenamePFZ);
01082 type = "STD.pfz";
01083 filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01084 Raster::WriteFloat(itsBaseSTD,FLOAT_NORM_PRESERVE,filenamePFZ);
01085 type = "SS.pfz";
01086 filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01087 Raster::WriteFloat(itsBaseSTD,FLOAT_NORM_PRESERVE,filenamePFZ);
01088
01089 type = "R.png";
01090 filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01091 Image<FLOAT> normBaseR = normalizeFloat(itsBaseR,FLOAT_NORM_0_255);
01092 Image<byte> byteBaseR = normBaseR;
01093 Raster::WriteGray(byteBaseR,filenamePFZ);
01094
01095 corrEigenMatrix(imageSetAnti,itsAntiCorr,itsAntiMean,itsAntiSTD,itsAntiSS,
01096 itsAntiN,false);
01097
01098
01099 for(uint i = 0; i < (uint)itsAntiCorr.getWidth(); i++)
01100 {
01101 for(uint j = 0; j < (uint)itsAntiCorr.getHeight(); j++)
01102 {
01103 std::cerr << itsAntiCorr.getVal(i,j) << "\t";
01104 }
01105 std::cerr << "\n";
01106 }
01107
01108 itsAntiR = getPearsonRMatrix(itsAntiCorr,itsAntiSTD);
01109
01110 for(uint i = 0; i < (uint)itsAntiR.getWidth(); i++)
01111 {
01112 for(uint j = 0; j < (uint)itsAntiR.getHeight(); j++)
01113 {
01114 std::cerr << itsAntiR.getVal(i,j) << "\t";
01115 }
01116 std::cerr << "\n";
01117 }
01118
01119 type = "corr.pfz";
01120 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01121 Raster::WriteFloat(itsAntiCorr,FLOAT_NORM_PRESERVE,filenamePFZ);
01122 type = "mean.pfz";
01123 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01124 Raster::WriteFloat(itsAntiMean,FLOAT_NORM_PRESERVE,filenamePFZ);
01125 type = "STD.pfz";
01126 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01127 Raster::WriteFloat(itsAntiSTD,FLOAT_NORM_PRESERVE,filenamePFZ);
01128 type = "SS.pfz";
01129 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01130 Raster::WriteFloat(itsAntiSS,FLOAT_NORM_PRESERVE,filenamePFZ);
01131
01132 type = "R.png";
01133 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01134 Image<FLOAT> normAntiR = normalizeFloat(itsAntiR,FLOAT_NORM_0_255);
01135 Image<byte> byteAntiR = normAntiR;
01136 Raster::WriteGray(byteAntiR,filenamePFZ);
01137
01138 Image<FLOAT> DiffR;
01139 DiffR.resize(itsAntiR.getWidth(),itsAntiR.getHeight());
01140
01141 typename Image<FLOAT>::iterator iAntiR = itsAntiR.beginw();
01142 typename Image<FLOAT>::iterator iBaseR = itsBaseR.beginw();
01143 typename Image<FLOAT>::iterator iDiffR = DiffR.beginw();
01144
01145 while(iAntiR != itsAntiR.endw())
01146 {
01147 *iDiffR = *iAntiR - *iBaseR;
01148 ++iDiffR; ++iAntiR; ++iBaseR;
01149 }
01150
01151 Image<PixRGB<FLOAT> > RGDiffR;
01152 RGDiffR.resize(itsAntiR.getWidth(),itsAntiR.getHeight());
01153 RGDiffR = normalizeRGPolarAuto(DiffR);
01154
01155 type = "diffR.png";
01156 filenamePFZ = baseFileNamePrefix + dot + type;
01157 Raster::WriteRGB(RGDiffR,filenamePFZ);
01158 }
01159
01160
01161
01162 template <class FLOAT>
01163 void ScaleRemoveSurprise<FLOAT>::SRSopenBayesFeatureBias(
01164 const string baseFileNamePrefix,
01165 const string antiFileNamePrefix)
01166 {
01167 string dash = "-";
01168 string dot = ".";
01169 string base = "base";
01170 string anti = "anti";
01171 string type = "corr.pfz";
01172 string filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01173 itsBaseCorr = Raster::ReadFloat(filenamePFZ);
01174 type = "mean.pfz";
01175 filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01176 itsBaseMean = Raster::ReadFloat(filenamePFZ);
01177 type = "STD.pfz";
01178 filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01179 itsBaseSTD = Raster::ReadFloat(filenamePFZ);
01180 type = "SS.pfz";
01181 filenamePFZ = baseFileNamePrefix + dot + base + dot + type;
01182 itsBaseSS = Raster::ReadFloat(filenamePFZ);
01183
01184 itsBaseR = getPearsonRMatrix(itsBaseCorr,itsBaseSTD);
01185
01186 type = "corr.pfz";
01187 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01188 itsAntiCorr = Raster::ReadFloat(filenamePFZ);
01189 type = "mean.pfz";
01190 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01191 itsAntiMean = Raster::ReadFloat(filenamePFZ);
01192 type = "STD.pfz";
01193 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01194 itsAntiSTD = Raster::ReadFloat(filenamePFZ);
01195 type = "SS.pfz";
01196 filenamePFZ = antiFileNamePrefix + dot + anti + dot + type;
01197 itsAntiSS = Raster::ReadFloat(filenamePFZ);
01198
01199 itsAntiR = getPearsonRMatrix(itsAntiCorr,itsAntiSTD);
01200
01201 Image<FLOAT> DiffR;
01202 DiffR.resize(itsAntiR.getWidth(),itsAntiR.getHeight());
01203
01204 typename Image<FLOAT>::iterator iAntiR = itsAntiR.beginw();
01205 typename Image<FLOAT>::iterator iBaseR = itsBaseR.beginw();
01206 typename Image<FLOAT>::iterator iDiffR = DiffR.beginw();
01207
01208 while(iAntiR != itsAntiR.endw())
01209 {
01210 *iDiffR = *iAntiR - *iBaseR;
01211 ++iDiffR; ++iAntiR; ++iBaseR;
01212 }
01213
01214 Image<PixRGB<FLOAT> > RGDiffR;
01215 RGDiffR.resize(itsAntiR.getWidth(),itsAntiR.getHeight());
01216 RGDiffR = normalizeRGPolarAuto(DiffR);
01217
01218 type = "diffR.png";
01219 filenamePFZ = baseFileNamePrefix + dot + type;
01220 Raster::WriteRGB(RGDiffR,filenamePFZ);
01221 }
01222
01223
01224
01225 template <class FLOAT>
01226 void ScaleRemoveSurprise<FLOAT>::SRScomputeBayesFeatureCurrent(
01227 const uint frame,
01228 const string fileNamePrefix)
01229 {
01230 const uint maps = itsLevMax + itsDelMax;
01231 const uint features = 7;
01232 const uint featureDims = maps * features;
01233
01234 Image<FLOAT> baseImage;
01235 std::vector<Image<FLOAT> > imageSetBase(featureDims,baseImage);
01236
01237 string dot = ".";
01238 string dash = "-";
01239 string ftype = ".pnm";
01240 string basePrefix = fileNamePrefix;
01241
01242 uint fnum = 0;
01243
01244 char frameChar[100];
01245 const uint itsFrame = frame;
01246
01247 if(itsFrame < 10)
01248 sprintf(frameChar,"00000%d",itsFrame);
01249 else if(itsFrame < 100)
01250 sprintf(frameChar,"0000%d",itsFrame);
01251 else if(itsFrame < 1000)
01252 sprintf(frameChar,"000%d",itsFrame);
01253 else if(itsFrame < 10000)
01254 sprintf(frameChar,"00%d",itsFrame);
01255 else if(itsFrame < 100000)
01256 sprintf(frameChar,"0%d",itsFrame);
01257 else
01258 sprintf(frameChar,"%d",itsFrame);
01259
01260 string feature = "SRby";
01261 string fenameB = basePrefix + dash + feature + dash;
01262 for(uint j = 0; j < maps; j++)
01263 {
01264 char cmap[10]; sprintf(cmap,"%d",j);
01265 string file = fenameB + cmap + dash + frameChar + ftype;
01266 imageSetBase[fnum] = Raster::ReadGray(file);
01267 fnum++;
01268 }
01269
01270
01271
01272
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284
01285
01286
01287
01288
01289
01290
01291
01292
01293
01294
01295
01296
01297
01298
01299
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01314
01315
01316
01317
01318
01319
01320 feature = "SRintensity";
01321 fenameB = basePrefix + dash + feature + dash;
01322 for(uint j = 0; j < maps; j++)
01323 {
01324 char cmap[10]; sprintf(cmap,"%d",j);
01325 string file = fenameB + cmap + dash + frameChar + ftype;
01326 imageSetBase[fnum] = Raster::ReadGray(file);
01327 fnum++;
01328 }
01329
01330 feature = "SRori_0";
01331 fenameB = basePrefix + dash + feature + dash;
01332 for(uint j = 0; j < maps; j++)
01333 {
01334 char cmap[10]; sprintf(cmap,"%d",j);
01335 string file = fenameB + cmap + dash + frameChar + ftype;
01336 imageSetBase[fnum] = Raster::ReadGray(file);
01337 fnum++;
01338 }
01339
01340 feature = "SRori_1";
01341 fenameB = basePrefix + dash + feature + dash;
01342 for(uint j = 0; j < maps; j++)
01343 {
01344 char cmap[10]; sprintf(cmap,"%d",j);
01345 string file = fenameB + cmap + dash + frameChar + ftype;
01346 imageSetBase[fnum] = Raster::ReadGray(file);
01347 fnum++;
01348 }
01349
01350 feature = "SRori_2";
01351 fenameB = basePrefix + dash + feature + dash;
01352 for(uint j = 0; j < maps; j++)
01353 {
01354 char cmap[10]; sprintf(cmap,"%d",j);
01355 string file = fenameB + cmap + dash + frameChar + ftype;
01356 imageSetBase[fnum] = Raster::ReadGray(file);
01357 fnum++;
01358 }
01359
01360 feature = "SRori_3";
01361 fenameB = basePrefix + dash + feature + dash;
01362 for(uint j = 0; j < maps; j++)
01363 {
01364 char cmap[10]; sprintf(cmap,"%d",j);
01365 string file = fenameB + cmap + dash + frameChar + ftype;
01366 imageSetBase[fnum] = Raster::ReadGray(file);
01367 fnum++;
01368 }
01369
01370 feature = "SRrg";
01371 fenameB = basePrefix + dash + feature + dash;
01372
01373 for(uint j = 0; j < maps; j++)
01374 {
01375 char cmap[10]; sprintf(cmap,"%d",j);
01376 string file = fenameB + cmap + dash + frameChar + ftype;
01377 imageSetBase[fnum] = Raster::ReadGray(file);
01378 fnum++;
01379 }
01380
01381 getLikelyhoodImage(imageSetBase,itsBaseCorr,itsBaseMean,true,
01382 itsBaseLikelyhood,itsNonNormalizedBaseL);
01383
01384 string post = "base.likelyhood.png";
01385 string file = basePrefix + dot + frameChar + dot + post;
01386 Image<FLOAT> nbase = normalizeFloat(itsBaseLikelyhood,FLOAT_NORM_0_255);
01387 Image<byte> bnbase = nbase;
01388 Raster::WriteGray(bnbase,file);
01389
01390 getLikelyhoodImage(imageSetBase,itsAntiCorr,itsAntiMean,true,
01391 itsAntiLikelyhood,itsNonNormalizedAntiL);
01392
01393 post = "anti.likelyhood.png";
01394 file = basePrefix + dot + frameChar + dot + post;
01395 nbase = normalizeFloat(itsAntiLikelyhood,FLOAT_NORM_0_255);
01396 bnbase = nbase;
01397 Raster::WriteGray(bnbase,file);
01398
01399 FLOAT one = 1.0;
01400 FLOAT two = 2.0;
01401 FLOAT beta = 0.075;
01402
01403 itsBayesImage = getNormalizedBayesImage(itsBaseLikelyhood,
01404 itsAntiLikelyhood,true,beta,
01405 one,one,two);
01406
01407 post = "bayes.likelyhood.png";
01408 file = basePrefix + dot + frameChar + dot + post;
01409 nbase = normalizeFloat(itsBayesImage,FLOAT_NORM_0_255);
01410 bnbase = nbase;
01411 Raster::WriteGray(bnbase,file);
01412
01413 Image<FLOAT> beliefValues;
01414 getAugmentedBeliefBayesImage(itsBayesImage,itsNonNormalizedBaseL,
01415 itsNonNormalizedAntiL,one,itsBeliefImage,
01416 beliefValues);
01417
01418 post = "belief.likelyhood.png";
01419 file = basePrefix + dot + frameChar + dot + post;
01420 nbase = normalizeFloat(itsBeliefImage,FLOAT_NORM_0_255);
01421 bnbase = nbase;
01422 Raster::WriteGray(bnbase,file);
01423
01424 post = "belief.likelyhood.NN.png";
01425 file = basePrefix + dot + frameChar + dot + post;
01426 for(int i = 0; i < itsBeliefImage.getWidth(); i++)
01427 {
01428 for(int j = 0; j < itsBeliefImage.getHeight(); j++)
01429 {
01430
01431 nbase.setVal(i,j,itsBeliefImage.getVal(i,j) * 128.0);
01432 }
01433 }
01434 bnbase = nbase;
01435 Raster::WriteGray(bnbase,file);
01436
01437 post = "belief.values.png";
01438 file = basePrefix + dot + frameChar + dot + post;
01439 nbase = normalizeFloat(beliefValues,FLOAT_NORM_0_255);
01440 bnbase = nbase;
01441 Raster::WriteGray(bnbase,file);
01442
01443 for(ushort i = 0; i < itsMaxIndex; i++)
01444 {
01445 itsRemoveSurprise[i].RSinputBayesWeightImage(itsBeliefImage);
01446 }
01447 }
01448
01449
01450
01451 template <class FLOAT>
01452 void ScaleRemoveSurprise<FLOAT>::SRSprocessFrame()
01453 {
01454
01455 char frameChar[100];
01456
01457 if(itsFrame < 10)
01458 sprintf(frameChar,"00000%d",itsFrame);
01459 else if(itsFrame < 100)
01460 sprintf(frameChar,"0000%d",itsFrame);
01461 else if(itsFrame < 1000)
01462 sprintf(frameChar,"000%d",itsFrame);
01463 else if(itsFrame < 10000)
01464 sprintf(frameChar,"00%d",itsFrame);
01465 else if(itsFrame < 100000)
01466 sprintf(frameChar,"0%d",itsFrame);
01467 else
01468 sprintf(frameChar,"%d",itsFrame);
01469
01470
01471
01472
01473
01474
01475
01476
01477
01478 for(ushort i = 0; i < itsMaxIndex; i++)
01479 {
01480
01481
01482
01483
01484
01485
01486
01487
01488
01489
01490
01491
01492
01493
01494 char fileName[100];
01495
01496 itsRemoveSurprise[i].RSinputRawImage(itsRawImage,itsFrame);
01497
01498 itsRemoveSurprise[i].RSinputSalMap(itsSalMap);
01499
01500 sprintf(fileName,"IntensitySurprise.%s.%d.SCSimage.float.pfz",frameChar,i);
01501 string fnameS = fileName;
01502 const Image<FLOAT> INimage = Raster::ReadFloat(fnameS);
01503 itsRemoveSurprise[i].RSinputConspicIN(INimage);
01504
01505 sprintf(fileName,"DirectionSurprise.%s.%d.SCSimage.float.pfz",frameChar,i);
01506 fnameS = fileName;
01507 const Image<FLOAT> DRimage = Raster::ReadFloat(fnameS);
01508 itsRemoveSurprise[i].RSinputConspicDR(DRimage);
01509
01510 sprintf(fileName,"FlickerSurprise.%s.%d.SCSimage.float.pfz",frameChar,i);
01511 fnameS = fileName;
01512 const Image<FLOAT> FLimage = Raster::ReadFloat(fnameS);
01513 itsRemoveSurprise[i].RSinputConspicFL(FLimage);
01514
01515 sprintf(fileName,"GaborSurprise.%s.%d.SCSimage.float.pfz",frameChar,i);
01516 fnameS = fileName;
01517 const Image<FLOAT> GAimage = Raster::ReadFloat(fnameS);
01518 itsRemoveSurprise[i].RSinputConspicGA(GAimage);
01519
01520 sprintf(fileName,"RedGreenSurprise.%s.%d.SCSimage.float.pfz",frameChar,i);
01521 fnameS = fileName;
01522 const Image<FLOAT> RGimage = Raster::ReadFloat(fnameS);
01523 itsRemoveSurprise[i].RSinputConspicRG(RGimage);
01524
01525 sprintf(fileName,"BlueYellowSurprise.%s.%d.SCSimage.float.pfz",frameChar,i);
01526 fnameS = fileName;
01527 const Image<FLOAT> BYimage = Raster::ReadFloat(fnameS);
01528 itsRemoveSurprise[i].RSinputConspicBY(BYimage);
01529
01530
01531 itsRemoveSurprise[i].RSprocessFrameSeperable();
01532
01533
01534 itsResultImages[i] = itsRemoveSurprise[i].RSgetFrame();
01535
01536
01537 LINFO("done");
01538
01539
01540
01541 }
01542
01543 FLOAT norm = 0.0F;
01544
01545
01546
01547
01548 for(ushort i = 0; i < itsMaxIndex; i++)
01549 {
01550 typename Image<PixRGB<FLOAT> >::iterator finalImageItr =
01551 itsFinalImage.beginw();
01552 typename Image<PixRGB<FLOAT> >::iterator resultImageItr =
01553 itsResultImages[i].beginw();
01554 const FLOAT bias = itsScaleBias[i];
01555 norm += bias;
01556 while(finalImageItr != itsFinalImage.endw())
01557 {
01558 *finalImageItr += (*resultImageItr) * bias;
01559 ++finalImageItr; ++resultImageItr;
01560 }
01561 }
01562
01563
01564 for(typename Image<PixRGB<FLOAT> >::iterator finalImageItr =
01565 itsFinalImage.beginw();
01566 finalImageItr != itsFinalImage.endw();
01567 ++finalImageItr)
01568 {
01569 *finalImageItr = (*finalImageItr)/norm;
01570 }
01571 }
01572
01573
01574
01575 template <class FLOAT>
01576 Image<PixRGB<FLOAT> > ScaleRemoveSurprise<FLOAT>::SRSgetFrame() const
01577 {
01578 return itsFinalImage;
01579 }
01580
01581
01582
01583 template <class FLOAT>
01584 Image<PixRGB<FLOAT> > ScaleRemoveSurprise<FLOAT>::SRSgetDiffImage() const
01585 {
01586 Image<PixRGB<float> > diffImage;
01587 diffImage.resize(itsImageSizeX,itsImageSizeY);
01588
01589 typename Image<PixRGB<float> >::const_iterator finalImageItr =
01590 itsFinalImage.begin();
01591 typename Image<PixRGB<float> >::const_iterator rawImageItr =
01592 itsRawImage.begin();
01593 typename Image<PixRGB<float> >::iterator diffImageItr =
01594 diffImage.beginw();
01595
01596 while(rawImageItr != itsRawImage.end())
01597 {
01598 *diffImageItr = abs((*rawImageItr) - (*finalImageItr));
01599 ++diffImageItr; ++rawImageItr; ++finalImageItr;
01600 }
01601 return diffImage;
01602 }
01603
01604
01605
01606 template <class FLOAT> std::vector<Image<PixRGB<FLOAT> > >
01607 ScaleRemoveSurprise<FLOAT>::SRSgetDiffParts() const
01608 {
01609 Image<PIX_H2SV_TYPE<FLOAT> > rawDiffImage;
01610 rawDiffImage.resize(itsImageSizeX,itsImageSizeY);
01611
01612 for(ushort i = 0; i < itsMaxIndex; i++)
01613 {
01614 const Image<PIX_H2SV_TYPE<FLOAT> > outImage =
01615 itsRemoveSurprise[i].RSgetRawOutImage();
01616 const Image<PIX_H2SV_TYPE<FLOAT> > inImage =
01617 itsRemoveSurprise[i].RSgetRawInImage();
01618
01619 typename Image<PIX_H2SV_TYPE<FLOAT> >::const_iterator outImageItr =
01620 outImage.begin();
01621 typename Image<PIX_H2SV_TYPE<FLOAT> >::const_iterator inImageItr =
01622 inImage.begin();
01623 typename Image<PIX_H2SV_TYPE<FLOAT> >::iterator rawDiffImageItr =
01624 rawDiffImage.beginw();
01625
01626 while(outImageItr != outImage.end())
01627 {
01628 (*rawDiffImageItr) += (*outImageItr) - (*inImageItr);
01629 ++outImageItr; ++inImageItr; ++rawDiffImageItr;
01630 }
01631 }
01632
01633 typename Image<PIX_H2SV_TYPE<FLOAT> >::iterator rawDiffImageItr =
01634 rawDiffImage.beginw();
01635
01636 while(rawDiffImageItr != rawDiffImage.end())
01637 {
01638 (*rawDiffImageItr) = (*rawDiffImageItr)/itsMaxIndex;
01639 ++rawDiffImageItr;
01640 }
01641
01642 Image<FLOAT> baseImage;
01643 baseImage.resize(itsImageSizeX,itsImageSizeY);
01644 std::vector<Image<FLOAT> > outImageVec(4,baseImage);
01645
01646
01647 for(ushort x = 0; x < itsImageSizeX; x++)
01648 {
01649 for(ushort y = 0; y < itsImageSizeY; y++)
01650 {
01651 outImageVec[0].setVal(x,y,rawDiffImage.getVal(x,y).p[0]);
01652 outImageVec[1].setVal(x,y,rawDiffImage.getVal(x,y).p[1]);
01653 outImageVec[2].setVal(x,y,rawDiffImage.getVal(x,y).p[2]);
01654 outImageVec[3].setVal(x,y,rawDiffImage.getVal(x,y).p[3]);
01655 }
01656 }
01657
01658 Image<PixRGB<FLOAT> > baseImageRGB;
01659 baseImageRGB.resize(itsImageSizeX,itsImageSizeY);
01660 std::vector<Image<PixRGB<FLOAT> > > outImageRGVec(4,baseImageRGB);
01661
01662 (outImageRGVec[0]) = normalizeRGPolarAuto(outImageVec[0]);
01663
01664 (outImageRGVec[1]) = normalizeRGPolarAuto(outImageVec[1]);
01665
01666 (outImageRGVec[2]) = normalizeRGPolarAuto(outImageVec[2]);
01667
01668 (outImageRGVec[3]) = normalizeRGPolarAuto(outImageVec[3]);
01669
01670 return outImageRGVec;
01671 }
01672
01673
01674
01675 template <class FLOAT>
01676 std::vector<Image<FLOAT> > ScaleRemoveSurprise<FLOAT>::SRSgetBetaParts() const
01677 {
01678 Image<PixHyper<FLOAT,6> > outBetaImage;
01679 outBetaImage.resize(itsImageSizeX,itsImageSizeY);
01680
01681 for(ushort i = 0; i < itsMaxIndex; i++)
01682 {
01683 const Image<PixHyper<FLOAT,6> > betaImage =
01684 itsRemoveSurprise[i].RSgetBetaImage();
01685
01686 typename Image<PixHyper<FLOAT,6> >::const_iterator betaImageItr =
01687 betaImage.begin();
01688 typename Image<PixHyper<FLOAT,6> >::iterator outBetaImageItr =
01689 outBetaImage.beginw();
01690
01691 PixHyper<FLOAT,6> pIndex((FLOAT)itsMaxIndex);
01692
01693 while(betaImageItr != betaImage.end())
01694 {
01695 (*outBetaImageItr) += (*betaImageItr)/pIndex;
01696 ++betaImageItr; ++outBetaImageItr;
01697 }
01698 }
01699
01700 Image<FLOAT> baseImage;
01701 baseImage.resize(itsImageSizeX,itsImageSizeY);
01702 std::vector<Image<FLOAT> > outImageVec(6,baseImage);
01703
01704 for(ushort x = 0; x < itsImageSizeX; x++)
01705 {
01706 for(ushort y = 0; y < itsImageSizeY; y++)
01707 {
01708 outImageVec[0].setVal(x,y,outBetaImage.getVal(x,y).p[0]);
01709 outImageVec[1].setVal(x,y,outBetaImage.getVal(x,y).p[1]);
01710 outImageVec[2].setVal(x,y,outBetaImage.getVal(x,y).p[2]);
01711 outImageVec[3].setVal(x,y,outBetaImage.getVal(x,y).p[3]);
01712 outImageVec[4].setVal(x,y,outBetaImage.getVal(x,y).p[4]);
01713 outImageVec[5].setVal(x,y,outBetaImage.getVal(x,y).p[5]);
01714 }
01715 }
01716 return outImageVec;
01717 }
01718
01719
01720
01721 template class ScaleRemoveSurprise<float>;
01722
01723 #endif