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