00001 00024 #ifndef RGBDTOOLS_MOTION_ESTIMATION_H 00025 #define RGBDTOOLS_MOTION_ESTIMATION_H 00026 00027 #include <boost/thread/mutex.hpp> 00028 00029 #include "rgbdtools/rgbd_frame.h" 00030 #include "rgbdtools/types.h" 00031 00032 namespace rgbdtools { 00033 00039 class MotionEstimation 00040 { 00041 public: 00042 00043 enum MotionConstraint {NONE = 0, ROLL_PITCH = 1, ROLL_PITCH_Z = 2}; 00044 00049 MotionEstimation(); 00050 00053 virtual ~MotionEstimation(); 00054 00065 AffineTransform getMotionEstimation( 00066 RGBDFrame& frame, 00067 const AffineTransform& prediction = AffineTransform::Identity()); 00068 00073 void setBaseToCameraTf(const AffineTransform& b2c); 00074 00075 void setMotionConstraint(int motion_constraint); 00076 00082 virtual int getModelSize() const { return 0; } 00083 00084 protected: 00085 00086 AffineTransform b2c_; 00087 00088 int motion_constraint_; 00089 00097 virtual bool getMotionEstimationImpl( 00098 RGBDFrame& frame, 00099 const AffineTransform& prediction, 00100 AffineTransform& motion) = 0; 00101 00108 void constrainMotion(AffineTransform& motion); 00109 }; 00110 00111 } // namespace rgbdtools 00112 00113 #endif // RGBDTOOLS_MOTION_ESTIMATION_H