00001 /*!@file Beobot/KeypointTracker.H a list of keypoints */ 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: Christian Siagian <siagian@usc.edu> 00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Beobot/KeypointTracker.H $ 00035 // $Id: KeypointTracker.H 9412 2008-03-10 23:10:15Z farhan $ 00036 // 00037 00038 #ifndef KEYPOINTTRACKER_DEFINED 00039 #define KEYPOINTTRACKER_DEFINED 00040 00041 #include "Image/Point2D.H" 00042 #include "SIFT/Keypoint.H" 00043 #include <vector> 00044 00045 //! Landmark class to take into account temporal info 00046 class KeypointTracker 00047 { 00048 public: 00049 00050 //! Constructor 00051 KeypointTracker(const std::string& name = ""); 00052 00053 //! Destructor 00054 ~KeypointTracker(); 00055 00056 //! add a keypoint to the list 00057 void add(rutz::shared_ptr<Keypoint> kp, Point2D<int> offset, uint fNum); 00058 00059 //! print the current list 00060 void print(); 00061 00062 //! get the last keypoints 00063 const rutz::shared_ptr<Keypoint>& getLastKeypoint() const; 00064 00065 //! do we have a keypoint from frame index 00066 const bool hasKeypointInFrame(uint index) const; 00067 00068 //! get the keypoint from frame index 00069 const rutz::shared_ptr<Keypoint>& getKeypointInFrame(uint index) const; 00070 00071 //! check to see if the tracker has been inactive since 00072 //! frame fNum 00073 bool isInactiveSince(uint fNum); 00074 00075 //! get the top left corner location + the KP location 00076 Point2D<int> getAbsLoc(); 00077 00078 // ###################################################################### 00079 /*! @name Iterators and access functions 00080 The iterators iterate on our feature vector data only, while the 00081 other access functions can be used to access the other data. */ 00082 //@{ 00083 00084 //! name getter 00085 inline const std::string& getName() const; 00086 00087 //! get all SIFT keypoints 00088 inline const std::vector< rutz::shared_ptr<Keypoint> >& getKeypoints() const; 00089 00090 //! get number of SIFT keypoints 00091 inline uint numKeypoints() const; 00092 00093 //! standard iterator 00094 typedef std::vector<rutz::shared_ptr<Keypoint> >::iterator iterator; 00095 00096 //! const iterator 00097 typedef std::vector<rutz::shared_ptr<Keypoint> >::const_iterator const_iterator; 00098 00099 //! Returns a read-only iterator to the beginning of the keypoint list 00100 inline const_iterator begin() const; 00101 00102 //! Returns a read-only iterator to one-past-the-end of the keypoint list 00103 inline const_iterator end() const; 00104 00105 //! Returns a read-write iterator to the beginning of the keypoint list 00106 inline iterator beginw(); 00107 00108 //! Returns a read-write iterator to one-past-the-end of the keypoint list 00109 inline iterator endw(); 00110 00111 private: 00112 std::string itsName; // name of this keypoint tracker 00113 std::vector<rutz::shared_ptr<Keypoint> > itsKeypoints; 00114 std::vector<Point2D<int> > itsOffsets; 00115 std::vector<uint> itsFrameNums; 00116 }; 00117 00118 // ###################################################################### 00119 // Inlined member functions 00120 // ###################################################################### 00121 inline const std::string& KeypointTracker::getName() const 00122 { return itsName; } 00123 00124 inline const std::vector< rutz::shared_ptr<Keypoint> >& 00125 KeypointTracker::getKeypoints() const 00126 { return itsKeypoints; } 00127 00128 inline uint KeypointTracker::numKeypoints() const 00129 { return itsKeypoints.size(); } 00130 00131 inline KeypointTracker::const_iterator KeypointTracker::begin() const 00132 { return itsKeypoints.begin(); } 00133 00134 inline KeypointTracker::const_iterator KeypointTracker::end() const 00135 { return itsKeypoints.end(); } 00136 00137 inline KeypointTracker::iterator KeypointTracker::beginw() 00138 { return itsKeypoints.begin(); } 00139 00140 inline KeypointTracker::iterator KeypointTracker::endw() 00141 { return itsKeypoints.end(); } 00142 00143 #endif 00144 00145 // ###################################################################### 00146 /* So things look consistent in everyone's emacs... */ 00147 /* Local Variables: */ 00148 /* indent-tabs-mode: nil */ 00149 /* End: */