Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

InputFrame.H

Go to the documentation of this file.
00001 /*!@file Channels/InputFrame.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/InputFrame.H $
00035 // $Id: InputFrame.H 10794 2009-02-08 06:21:09Z itti $
00036 //
00037 
00038 #ifndef CHANNELS_INPUTFRAME_H_DEFINED
00039 #define CHANNELS_INPUTFRAME_H_DEFINED
00040 
00041 #include "Image/Image.H"
00042 #include "Image/Pixels.H"
00043 #include "Image/PyramidCache.H"
00044 #include "Util/SimTime.H"
00045 #include "rutz/shared_ptr.h"
00046 
00047 class InputFrame
00048 {
00049 public:
00050   //! Uninitialized constructor
00051   InputFrame();
00052 
00053   // default dtor, copy, assignment OK
00054 
00055   // ######################################################################
00056   /*! @name Pseudo-constructors
00057 
00058       There are several ways to construct an input frame. These are
00059       provided to allow maximum efficiency, so that only the minimum
00060       required information must be passed in. The size of the input
00061       image(s) can later be queried with getDims(). The timestamp
00062       parameter (t, in seconds) is used to compute transient responses
00063       to flickering stimuli. */
00064   //@{
00065 
00066   //! Initialize to a new input frame
00067   /*! @param in input image -- this is a pointer for the input
00068       argument so as to avoid unwanted implicit conversion -- we want
00069       to really initialize from a byte-rgb image, and not a float-rgb
00070       image, nor a byte-grayscale image
00071   */
00072   static InputFrame fromRgb(const Image<PixRGB<byte> >* in,
00073                             SimTime t = SimTime::ZERO(),
00074                             const Image<byte>* clip = 0,
00075                             const rutz::shared_ptr<PyramidCache<float> >& cache = emptyCache,
00076                             bool disableCache = false);
00077 
00078   static InputFrame fromRgbFloat(const Image<PixRGB<float> >* col,
00079                                  SimTime t = SimTime::ZERO(),
00080                                  const Image<byte> * clip = 0,
00081                                  const rutz::shared_ptr<PyramidCache<float> >& cache = emptyCache,
00082                                  bool disableCache = false);
00083 
00084   static InputFrame fromGrayFloat(const Image<float>* bw,
00085                                   SimTime t = SimTime::ZERO(),
00086                                   const Image<byte> * clip = 0,
00087                                   const rutz::shared_ptr<PyramidCache<float> >& cache = emptyCache,
00088                                   bool disableCache = false);
00089 
00090   static InputFrame fromRgbAndGrayFloat(const Image<PixRGB<byte> >* rgbb,
00091                                         const Image<PixRGB<float> >* rgbf,
00092                                         const Image<float>* bw,
00093                                         SimTime t = SimTime::ZERO(),
00094                                         const Image<byte> * clip = 0,
00095                                         const rutz::shared_ptr<PyramidCache<float> >& cache = emptyCache,
00096                                         bool disableCache = false);
00097 
00098   static InputFrame fromRgbDepth(const Image<PixRGB<byte> >* in,
00099                                  const Image<PixRGB<byte> >* depth,
00100                                  SimTime t = SimTime::ZERO(),
00101                                  const Image<byte>* clip = 0,
00102                                  const rutz::shared_ptr<PyramidCache<float> >& cache = emptyCache,
00103                                  bool disableCache = false);
00104   //@}
00105 
00106   SimTime time() const { return itsTime; }
00107 
00108   const Dims& getDims() const { return itsDims; }
00109   const int getWidth() const { return itsDims.w(); }
00110   const int getHeight() const { return itsDims.h(); }
00111 
00112   const Image<byte>& clipMask() const { return itsClipMask; }
00113 
00114   const Image<PixRGB<byte> >& colorByte() const { return itsColorByte; }
00115   const Image<PixRGB<float> >& colorFloat() const;
00116   const Image<float>& grayFloat() const { return itsGrayFloat; }
00117 
00118   const rutz::shared_ptr<PyramidCache<float> >& pyrCache() const { return itsPyrCache; }
00119 
00120   static const rutz::shared_ptr<PyramidCache<float> > emptyCache;
00121 
00122   const Image<PixRGB<byte> > getDepthImage() const { return itsDepthImage; }
00123 
00124   const bool hasDepthImage() const { return itsDepthImage.initialized(); }
00125 
00126 private:
00127   SimTime itsTime;
00128   Dims itsDims;
00129   Image<byte> itsClipMask;
00130   Image<PixRGB<byte> > itsColorByte;
00131   mutable Image<PixRGB<float> > itsColorFloat;
00132   Image<float> itsGrayFloat;
00133   rutz::shared_ptr<PyramidCache<float> > itsPyrCache;
00134   //! depth image
00135   Image<PixRGB<byte> > itsDepthImage;
00136 };
00137 
00138 // ######################################################################
00139 /* So things look consistent in everyone's emacs... */
00140 /* Local Variables: */
00141 /* indent-tabs-mode: nil */
00142 /* End: */
00143 
00144 #endif // CHANNELS_INPUTFRAME_H_DEFINED

Generated on Mon Nov 23 15:45:29 2009 for iLab Neuromorphic Vision Toolkit by  doxygen 1.4.4