OrientationChannel.H

Go to the documentation of this file.
00001 /*!@file Channels/OrientationChannel.H */
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/OrientationChannel.H $
00035 // $Id: OrientationChannel.H 10794 2009-02-08 06:21:09Z itti $
00036 //
00037 
00038 #ifndef ORIENTATIONCHANNEL_H_DEFINED
00039 #define ORIENTATIONCHANNEL_H_DEFINED
00040 
00041 #include "Channels/ComplexChannel.H"
00042 #include "rutz/shared_ptr.h"
00043 
00044 class GaborChannel;
00045 
00046 //######################################################################
00047 //! A composite channel containing a set of orientation-tuned gabor channels.
00048 /*! This is an example of a homogeneous complex channel. Thus, the
00049   JetSpec representation will have an index for the subchannel number,
00050   and further indices for the various Jet components (which are
00051   identical for all subchannels). */
00052 class OrientationChannel : public ComplexChannel
00053 {
00054 public:
00055   //! Construct with standard params
00056   OrientationChannel(OptionManager& mgr);
00057 
00058   //! Construct with standard params and tag override
00059   OrientationChannel(OptionManager& mgr, const char* tag, const char* desc, const char* gabortag);
00060 
00061   //! Destructor
00062   virtual ~OrientationChannel();
00063 
00064   //! Wraps ComplexChannel's subChan() and casts the result to GaborChannel.
00065   virtual GaborChannel& gabor(const uint idx) const;
00066 
00067   //! Overload so that we can reconfigure when our params get changed
00068   virtual void paramChanged(ModelParamBase* const param,
00069                             const bool valueChanged,
00070                             ParamClient::ChangeStatus* status);
00071 
00072   //! the possible interaction types between orientations
00073   enum InteractType { NONE = 0, SUB_MEAN = 1, CUSTOM = 2 };
00074 
00075   //! returns the currently set interaction type between the orientation
00076   InteractType getInteractType();
00077 
00078   //! sets the interaction type between the orientations
00079   void setInteractType(InteractType type);
00080 
00081   //! returns the coefficients vector for interactions between orientations
00082   std::vector<float> getInteractCoeffs();
00083 
00084   //! sets the coefficients vector for the interactions between orientations
00085   void setInteractCoeffs(std::vector<float>& coeffs);
00086 
00087   //! compute interactions, then call ComplexChannel::getOutput()
00088   virtual Image<float> getOutput();
00089 
00090 protected:
00091   //! trigger the interaction computation between the gabor filters
00092   void doInteractions();
00093 
00094   OModelParam<uint> itsNumOrients;  //!< number of Gabor subchannels
00095 
00096   //! (re-)build our subchannels
00097   virtual void buildSubChans();
00098 
00099   //! parse the string for the interaction type between orientations
00100   virtual void parseInteractString(const std::string& value);
00101 
00102   //! OrientationChannel requires only luminance input.
00103   virtual void doInput(const InputFrame& inframe);
00104 
00105   //! type of interaction mode between orientations
00106   OModelParam<std::string> itsInteractString;
00107 
00108 private:
00109   InteractType itsInteractType;
00110   std::vector<float> itsInteractCoeffs;
00111   bool itsDidInteractions;
00112   bool itsOverideTagName;
00113   std::string itsGaborOverideTag;
00114 };
00115 
00116 // ######################################################################
00117 /* So things look consistent in everyone's emacs... */
00118 /* Local Variables: */
00119 /* indent-tabs-mode: nil */
00120 /* End: */
00121 
00122 #endif // ORIENTATIONCHANNEL_H_DEFINED
Generated on Sun May 8 08:04:41 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3