MotionEnergy.H

Go to the documentation of this file.
00001 /*!@file RCBot/Motion/MotionEnergy.H detect motion in an image stream */
00002 
00003 // //////////////////////////////////////////////////////////////////// //
00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the //
00005 // 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: Lior Elazary <lelazary@yahoo.com>
00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/RCBot/Motion/MotionEnergy.H $
00035 // $Id: MotionEnergy.H 8429 2007-05-25 18:29:40Z rjpeters $
00036 //
00037 
00038 #ifndef MotionEnergy_H
00039 #define MotionEnergy_H
00040 
00041 #include "Image/PyramidOps.H"
00042 #include "Image/Image.H"
00043 #include "Image/ImageSet.H"
00044 #include "Image/DrawOps.H"
00045 #include "Image/PyramidTypes.H"
00046 #include "Image/PyrBuilder.H"
00047 #include "Image/MathOps.H"
00048 
00049 #include <math.h>
00050 
00051 // ######################################################################
00052 //! This class implements Spatiotemporal Energy motion detections
00053 /*! The class uses the filter results of pyramids of other types
00054   to implement Spatiotemporal Energy motion detection. The motion is extracted
00055   by finding edge orientations in the time and space domain. The edge
00056   orientation are computed using sobel edge dectors. */
00057 
00058 template <class T>
00059 class MotionEnergyPyrBuilder : public PyrBuilder<T>
00060 {
00061 public:
00062   // ######################################################################
00063   // #### Constructors
00064   // ######################################################################
00065   MotionEnergyPyrBuilder(const PyramidType typ,
00066                          const float gabor_theta = 0.0F,
00067                          const float intens = 10.0F,
00068                          const int timeDomainSize = 5,
00069                          const float magThreshold = 1500);
00070 
00071   //! default copy constructor and assignment are okay
00072   //! std::vector and std::deque handle the copying of the individual images
00073 
00074   //! cloning constructor
00075   virtual MotionEnergyPyrBuilder<T>* clone() const;
00076 
00077   //! Builds a Motion Energy pyramid based on a image
00078   virtual ImageSet<T> build(const Image<T>& image,
00079                             const int firstlevel,
00080                             const int depth,
00081                             PyramidCache<T>* cache = 0);
00082 
00083   void updateMotion(const Image<T>& image, const int depth);
00084 
00085   Image<float> buildHorizontalMotionLevel(int lev);
00086   Image<float> buildVerticalMotionLevel(int lev);
00087 
00088   ImageSet<float> buildHorizontalMotion();
00089   ImageSet<float> buildVerticalMotion();
00090 
00091   //! reset the stored queues - overrides PyrBuilder<T>::reset()
00092   virtual void reset();
00093 
00094   //! show the motion image as vectors (use for debuging)
00095   //! return the average motion
00096   float DrawVectors(Image<T> &img, Image<float> &motion);
00097 
00098 private:
00099 
00100   //! get the motion from the image by using sobel grad detector
00101   //! to detect edge orientations in the space and time
00102   void getMotion(const Image<T> &img, Image<float> &motion, int y_pos);
00103 
00104   std::deque< ImageSet<T> > imgPyrQ; // hold the time domain pyramid
00105   PyramidType itsPtype;              // Gaussian, Laplacian, Gabor, etc.
00106   float itsGaborAngle;               // orientation tuning for Gabor pyr
00107   float itsGaborIntens;              // filter strength for Gabor pyr
00108   unsigned int itsTimeDomainSize;    // the number of frames to hold in imgPyrQ
00109   float itsMagThreshold;             // only accept mag over this threshold
00110 };
00111 
00112 #endif
00113 
00114 // ######################################################################
00115 /* So things look consistent in everyone's emacs... */
00116 /* Local Variables: */
00117 /* indent-tabs-mode: nil */
00118 /* End: */
Generated on Sun May 8 08:05:35 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3