00001 /*!@file Neuro/VisualCortexEyeMvt.H a fake VisualCortex whose saliency map 00002 is built from human eye movement traces */ 00003 00004 // //////////////////////////////////////////////////////////////////// // 00005 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the // 00006 // University of Southern California (USC) and the iLab at USC. // 00007 // See http://iLab.usc.edu for information about this project. // 00008 // //////////////////////////////////////////////////////////////////// // 00009 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00010 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00011 // in Visual Environments, and Applications'' by Christof Koch and // 00012 // Laurent Itti, California Institute of Technology, 2001 (patent // 00013 // pending; application number 09/912,225 filed July 23, 2001; see // 00014 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00015 // //////////////////////////////////////////////////////////////////// // 00016 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00017 // // 00018 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00019 // redistribute it and/or modify it under the terms of the GNU General // 00020 // Public License as published by the Free Software Foundation; either // 00021 // version 2 of the License, or (at your option) any later version. // 00022 // // 00023 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00024 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00025 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00026 // PURPOSE. See the GNU General Public License for more details. // 00027 // // 00028 // You should have received a copy of the GNU General Public License // 00029 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00030 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00031 // Boston, MA 02111-1307 USA. // 00032 // //////////////////////////////////////////////////////////////////// // 00033 // 00034 // Primary maintainer for this file: Laurent Itti <itti@usc.edu> 00035 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Neuro/VisualCortexEyeMvt.H $ 00036 // $Id: VisualCortexEyeMvt.H 11647 2009-09-03 01:18:22Z itti $ 00037 // 00038 00039 #ifndef VISUALCORTEXEYEMVT_H_DEFINED 00040 #define VISUALCORTEXEYEMVT_H_DEFINED 00041 00042 #include "Image/ImageSet.H" 00043 #include "Image/LevelSpec.H" 00044 #include "Neuro/VisualCortex.H" 00045 #include "Simulation/SimEvents.H" 00046 #include <vector> 00047 00048 class SimTime; 00049 class EyeTrace; 00050 00051 // ###################################################################### 00052 //! The VisualCortexEyeMvt Class 00053 /*! This is a fake VisualCortex that outputs a saliency map built from 00054 a number of human eye movement traces. It contains an 00055 EyeTrackerEyeHeadController object that will provide eye position 00056 of the various humans, and it builds some sort of heat map from 00057 those. */ 00058 class VisualCortexEyeMvt : public VisualCortex 00059 { 00060 public: 00061 //! Construct with no channel; channels are ignored anyways 00062 VisualCortexEyeMvt(OptionManager& mgr, 00063 const std::string& descrName = "Visual Cortex Eye Mvt", 00064 const std::string& tagName = "VisualCortexEyeMvt"); 00065 00066 //! Virtual destructor for safe inheritance. 00067 virtual ~VisualCortexEyeMvt(); 00068 00069 //! Get the output from visual cortex. 00070 virtual Image<float> getOutput(); 00071 00072 protected: 00073 //! Callback for every clock tick, to run our plotting 00074 SIMCALLBACK_DECLARE(VisualCortexEyeMvt, SimEventClockTick); 00075 00076 //! Callback for every input frame 00077 SIMCALLBACK_DECLARE(VisualCortexEyeMvt, SimEventRetinaImage); 00078 00079 //! Callback for every time we should save our outputs 00080 SIMCALLBACK_DECLARE(VisualCortexEyeMvt, SimEventSaveOutput); 00081 00082 //! Callback for every time someone wants our features 00083 SIMREQHANDLER_DECLARE(VisualCortexEyeMvt, SimReqVCXfeatures); 00084 00085 //! Callback for every time someone wants our maps 00086 SIMREQHANDLER_DECLARE(VisualCortexEyeMvt, SimReqVCXmaps); 00087 00088 OModelParam<std::string> itsFnames; //!< names of eye movement files 00089 OModelParam<float> itsSigma; //!< sigma of gaussian blobs in pix at sml 00090 OModelParam<float> itsForgetFac; //!< forgetting factor 00091 OModelParam<uint> itsDelay; //!< human-to-human delay, in eye samples 00092 OModelParam<bool> itsUseMax; //!< use max to combine instead of sum 00093 OModelParam<bool> itsSaccadeOnly; //!< plot only when a saccade 00094 OModelParam<LevelSpec> itsLevelSpec; //!< our levelspec 00095 OModelParam<bool> itsSaveOutput; //!< save our output? 00096 OModelParam<float> itsOutputFactor; //!< output range factor 00097 00098 // get started 00099 virtual void start1(); 00100 00101 private: 00102 ImageSet<float> itsMaps; // one map per human 00103 std::vector<rutz::shared_ptr<EyeTrace> > itsEyeTrace; // one per human 00104 std::vector<size_t> itsEyeSample; // one per human 00105 Image<float> itsOutputCache; // cached output map 00106 }; 00107 00108 #endif 00109 00110 /* So things look consistent in everyone's emacs... */ 00111 /* Local Variables: */ 00112 /* indent-tabs-mode: nil */ 00113 /* End: */