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 #include "Surprise/SingleChannelSurprise.H"
00039 
00040 #include "Channels/ChannelOpts.H"
00041 #include "Channels/SingleChannel.H"
00042 #include "Component/ModelOptionDef.H"
00043 #include "Component/OptionManager.H"
00044 #include "Surprise/SurpriseOpts.H"
00045 #include "Raster/Raster.H"
00046 #include "Image/ShapeOps.H"
00047 #include "Image/Normalize.H"
00048 #include "Image/MathOps.H"
00049 #include "rutz/demangle.h"
00050 
00051 #include <iostream>
00052 #include <fstream>
00053 #include <typeinfo>
00054 
00055 
00056 template <class SMODEL>
00057 SingleChannelSurprise<SMODEL>::
00058 SingleChannelSurprise(OptionManager& mgr) :
00059   SubmapAlgorithm(mgr, "Single Channel Surprise", "SingleChannelSurprise"),
00060   itsSQlen(&OPT_SingleChannelSurpriseSQlen, this),
00061   itsUpdateFac(&OPT_SingleChannelSurpriseUpdFac, this),
00062   itsNeighUpdateFac(&OPT_SingleChannelSurpriseNeighUpdFac, this),
00063   itsInitialVal("SingleChannelSurpriseIniVal", this, 0.0),
00064   itsInitialVar("SingleChannelSurpriseIniVar", this, 25.0),
00065   itsBgVal("SingleChannelSurpriseBgVal", this, 5.0),
00066   itsNeighSigma(&OPT_SingleChannelSurpriseNeighSigma, this),
00067   itsLocSigma(&OPT_SingleChannelSurpriseLocSigma, this),
00068   itsTakeSTMax(&OPT_SingleChannelSurpriseTakeSTMax, this),
00069   itsLogged(&OPT_SingleChannelSurpriseLogged, this),
00070   itsLevelSpec(&OPT_LevelSpec, this),
00071   itsProbe(&OPT_SingleChannelSurpriseProbe, this),
00072   itsSLfac(&OPT_SingleChannelSurpriseSLfac, this),
00073   itsSSfac(&OPT_SingleChannelSurpriseSSfac, this),
00074   itsJointKLBiasTypeStr(&OPT_SingleChannelSurpriseKLBias, this),
00075   itsSmap(), itsLogEntry(0U)
00076 {
00077   this->setDescriptiveName(std::string("Single Channel ") +
00078                            rutz::demangled_name(typeid(SMODEL)));
00079   this->setTagName(std::string("SingleChannel") +
00080                    rutz::demangled_name(typeid(SMODEL)));
00081 }
00082 
00083 
00084 template <class SMODEL>
00085 SingleChannelSurprise<SMODEL>::~SingleChannelSurprise()
00086 { }
00087 
00088 
00089 template <class SMODEL>
00090 void SingleChannelSurprise<SMODEL>::start1()
00091 {
00092   int maxind = itsLevelSpec.getVal().maxIndex();
00093 
00094   if(!strcmp(itsJointKLBiasTypeStr.getVal().c_str(),"Static"))
00095     itsJointKLBiasType = SU_KL_STATIC;
00096   else
00097     itsJointKLBiasType = SU_KL_NONE;
00098 
00099   SurpriseMap<SMODEL> initial;
00100   initial.init(itsSQlen.getVal(), itsUpdateFac.getVal(),
00101                itsNeighUpdateFac.getVal(),
00102                itsInitialVal.getVal() + itsBgVal.getVal(),
00103                itsInitialVar.getVal(), itsNeighSigma.getVal(),
00104                itsLocSigma.getVal(), itsProbe.getVal(),
00105                itsSLfac.getVal(), itsSSfac.getVal(),
00106                itsJointKLBiasType, itsTakeSTMax.getVal());
00107 
00108   for (int i = 0; i < maxind; i ++) itsSmap.push_back(initial);
00109 }
00110 
00111 
00112 template <class SMODEL>
00113 Image<float> SingleChannelSurprise<SMODEL>::getSurpriseMap(const uint index,
00114                                                    const Image<float>& submap)
00115 {
00116   Image<double> submapd = submap;
00117   if (itsBgVal.getVal()) submapd += itsBgVal.getVal(); 
00118 
00119   
00120   Image<double> var(submap.getDims(), NO_INIT);
00121   var.clear(itsInitialVar.getVal());
00122 
00123   SurpriseImage<SMODEL> sample(itsUpdateFac.getVal(), submapd, var);
00124 
00125   
00126   return Image<float>(itsSmap[index].surprise(sample));
00127 }
00128 
00129 
00130 template <class SMODEL>
00131 Image<float> SingleChannelSurprise<SMODEL>::
00132 compute(const SingleChannel& chan, const uint i)
00133 {
00134 
00135 
00136   return this->getSurpriseMap
00137     (i, chan.postProcessMap(chan.getRawCSmap(i), i));
00138 }
00139 
00140 
00141 
00142 
00143 template class SingleChannelSurprise<SurpriseModelSG>;
00144 template class SingleChannelSurprise<SurpriseModelSP>;
00145 template class SingleChannelSurprise<SurpriseModelSP1>;
00146 template class SingleChannelSurprise<SurpriseModelSPC>;
00147 template class SingleChannelSurprise<SurpriseModelSPF>;
00148 template class SingleChannelSurprise<SurpriseModelCS>;
00149 template class SingleChannelSurprise<SurpriseModelGG>;
00150 template class SingleChannelSurprise<SurpriseModelPM>;
00151 template class SingleChannelSurprise<SurpriseModelOD>;
00152 
00153 
00154 
00155 
00156 
00157 
00158