OptimalGains.H

Go to the documentation of this file.
00001 /*!@file Channels/OptimalGains.H Compute the optimal gains that maximize SNR */
00002 
00003 // //////////////////////////////////////////////////////////////////// //
00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2005   //
00005 // by the University of Southern California (USC) and the iLab at USC.  //
00006 // See http://iLab.usc.edu for information about this project.          //
00007 // //////////////////////////////////////////////////////////////////// //
00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected //
00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency //
00010 // in Visual Environments, and Applications'' by Christof Koch and      //
00011 // Laurent Itti, California Institute of Technology, 2001 (patent       //
00012 // pending; application number 09/912,225 filed July 23, 2001; see      //
00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status).     //
00014 // //////////////////////////////////////////////////////////////////// //
00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit.       //
00016 //                                                                      //
00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can   //
00018 // redistribute it and/or modify it under the terms of the GNU General  //
00019 // Public License as published by the Free Software Foundation; either  //
00020 // version 2 of the License, or (at your option) any later version.     //
00021 //                                                                      //
00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope  //
00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the   //
00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //
00025 // PURPOSE.  See the GNU General Public License for more details.       //
00026 //                                                                      //
00027 // You should have received a copy of the GNU General Public License    //
00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write   //
00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,   //
00030 // Boston, MA 02111-1307 USA.                                           //
00031 // //////////////////////////////////////////////////////////////////// //
00032 //
00033 // Primary maintainer for this file:
00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Channels/OptimalGains.H $
00035 // $Id: OptimalGains.H 10028 2008-08-01 03:12:32Z itti $
00036 //
00037 
00038 #ifndef CHANNELS_OPTIMALGAINS_H_DEFINED
00039 #define CHANNELS_OPTIMALGAINS_H_DEFINED
00040 
00041 #include "Channels/ChannelVisitor.H"
00042 #include "Image/Image.H"
00043 #include "rutz/shared_ptr.h"
00044 
00045 class ParamMap;
00046 
00047 /// Compute the optimal gains that maximize SNR
00048 /** This ChannelVisitor computes the salience of the target and
00049     distractors using the masks as cues for their locations. Based on
00050     the salience, it finds SNR and the gains; however, SNR and gains
00051     are only used internally (they are needed to compute the salience
00052     at the next level up the channel hierarchy) but are not saved
00053     here. Rather, the salienceT / salienceD info is saved. One can
00054     then use app-combineOptimalGains to compute the gains, and a
00055     PrefrontalCortexGS to use them.  */
00056 class OptimalGainsFinder : public ChannelVisitor
00057 {
00058 public:
00059   /// Construct with settings for the algorithm
00060   OptimalGainsFinder(const Image<byte>& targetMask,
00061                      const Image<byte>& distractorMask,
00062                      rutz::shared_ptr<ParamMap> pmap,
00063                      const bool doMax = true);
00064 
00065   /// Virtual destructor
00066   virtual ~OptimalGainsFinder();
00067 
00068   /// Visit the given ChannelBase node.
00069   virtual void visitChannelBase(ChannelBase& chan);
00070 
00071   /// Visit the given SingleChannel node.
00072   virtual void visitSingleChannel(SingleChannel& chan);
00073 
00074   /// Visit the given ComplexChannel node.
00075   virtual void visitComplexChannel(ComplexChannel& chan);
00076 
00077   /// Get our pmap, it will contain saliencsT and salienceD values after visit
00078   virtual rutz::shared_ptr<ParamMap> pmap() const;
00079 
00080 private:
00081   Image<byte> itsTargetMask;
00082   Image<byte> itsDistractorMask;
00083   rutz::shared_ptr<ParamMap> itsPmap;
00084   bool itsDoMax;
00085 };
00086 
00087 //! Background firing rate to use when computing SNR
00088 #define OPTIGAIN_BG_FIRING 0.1
00089 
00090 // ######################################################################
00091 /* So things look consistent in everyone's emacs... */
00092 /* Local Variables: */
00093 /* mode: c++ */
00094 /* indent-tabs-mode: nil */
00095 /* End: */
00096 
00097 #endif // CHANNELS_OPTIMALGAINS_H_DEFINED
Generated on Sun May 8 08:40:22 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3