00001 #ifndef __fovis_stereo_disparity_hpp__ 00002 #define __fovis_stereo_disparity_hpp__ 00003 00004 #include <inttypes.h> 00005 00006 #include "stereo_calibration.hpp" 00007 #include "depth_source.hpp" 00008 #include "frame.hpp" 00009 00010 namespace fovis 00011 { 00012 00022 class StereoDisparity : public DepthSource 00023 { 00024 public: 00025 StereoDisparity(const StereoCalibration* calib); 00026 00027 ~StereoDisparity(); 00028 00034 void setDisparityData(const float* disparity_data); 00035 00036 bool haveXyz(int u, int v); 00037 00038 void getXyz(OdometryFrame* frame); 00039 00040 void refineXyz(FeatureMatch* matches, 00041 int num_matches, 00042 OdometryFrame* frame); 00043 00044 double getBaseline() const { return _calib->getBaseline(); } 00045 00046 private: 00047 typedef std::vector<std::pair<double, double> > Points2d; 00048 00055 bool getXyzInterp(KeypointData* kpdata); 00056 00063 Eigen::Vector3d getXyzValues(int u, int v, float disparity); 00064 00065 const StereoCalibration* _calib; 00066 00067 int _width; 00068 int _height; 00069 00070 Eigen::Matrix4d *_uvd1_to_xyz; 00071 00072 float* _disparity_data; 00073 }; 00074 00075 } 00076 00077 #endif