00001 /*!@file Channels/JetFiller.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: Rob Peters <rjpeters at usc dot edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Channels/JetFiller.H $ 00035 // $Id: JetFiller.H 9412 2008-03-10 23:10:15Z farhan $ 00036 // 00037 00038 #ifndef CHANNELS_JETFILLER_H_DEFINED 00039 #define CHANNELS_JETFILLER_H_DEFINED 00040 00041 #include "Channels/ChannelVisitor.H" 00042 #include "Channels/Jet.H" 00043 #include "Image/Point2D.H" 00044 00045 #include <vector> 00046 00047 /// Fill the components of the given Jet that relate to the called channel 00048 /** All relevant components of the Jet are set to the channel's values 00049 at the specified location across all pyramid levels. The channel 00050 will store its data starting at the given index in the jet, and 00051 will return the number of entries filled. The index vector will be 00052 modified as the various Jet components are explored, but will be 00053 restored to its original state upon completion. */ 00054 class JetFiller : public ChannelVisitor 00055 { 00056 public: 00057 /// Construct 00058 JetFiller(const Point2D<int>& loc, Jet<float>& j, bool do_interp); 00059 00060 /// Virtual destructor 00061 virtual ~JetFiller(); 00062 00063 /// Visit the given ChannelBase node. 00064 virtual void visitChannelBase(ChannelBase& chan); 00065 00066 /// Visit the given SingleChannel node. 00067 virtual void visitSingleChannel(SingleChannel& chan); 00068 00069 /// Visit the given ComplexChannel node. 00070 virtual void visitComplexChannel(ComplexChannel& chan); 00071 00072 private: 00073 Point2D<int> itsLoc; 00074 Jet<float>& itsJet; 00075 bool itsDoInterp; 00076 std::vector<int> itsIndex; 00077 }; 00078 00079 /// Fill the specification of a Jet with data that relate to the called channel 00080 class JetSpecFiller : public ChannelVisitor 00081 { 00082 public: 00083 /// Construct 00084 JetSpecFiller(); 00085 00086 /// Virtual destructor 00087 virtual ~JetSpecFiller(); 00088 00089 /// Visit the given ChannelBase node. 00090 virtual void visitChannelBase(ChannelBase& chan); 00091 00092 /// Visit the given SingleChannel node. 00093 virtual void visitSingleChannel(SingleChannel& chan); 00094 00095 /// Visit the given ComplexChannel node. 00096 virtual void visitComplexChannel(ComplexChannel& chan); 00097 00098 /// Get the resulting JetSpec 00099 rutz::shared_ptr<JetSpec> getJetSpec() const 00100 { return itsJetSpec; } 00101 00102 private: 00103 rutz::shared_ptr<JetSpec> itsJetSpec; 00104 }; 00105 00106 // ###################################################################### 00107 /* So things look consistent in everyone's emacs... */ 00108 /* Local Variables: */ 00109 /* mode: c++ */ 00110 /* indent-tabs-mode: nil */ 00111 /* End: */ 00112 00113 #endif // CHANNELS_JETFILLER_H_DEFINED