Go to the documentation of this file.00001 #ifndef __fovis_initial_homography_estimator_hpp__
00002 #define __fovis_initial_homography_estimator_hpp__
00003
00004 #include <vector>
00005 #include <stdint.h>
00006 #include <Eigen/Dense>
00007
00008 namespace fovis
00009 {
00010
00014 class InitialHomographyEstimator {
00015 public:
00016 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
00017 public:
00023 void setTemplateImage(const uint8_t * grayData, int width, int height, int stride, int downsampleFactor);
00024
00030 void setTestImage(const uint8_t * grayData, int width, int height, int stride, int downsampleFactor);
00031
00037 Eigen::Matrix3f track(const Eigen::Matrix3f &init_H, int nIters, double *finalRMS);
00038
00039 private:
00040 int template_rows, template_cols;
00041 Eigen::MatrixXf templateImage, testImage;
00042 Eigen::MatrixXf warpedTestImage;
00043 Eigen::MatrixXf errorIm;
00044 Eigen::ArrayXf templateDxRow, templateDyRow;
00045 Eigen::MatrixXf templatePoints;
00046 Eigen::ArrayXf xx, yy;
00047
00048
00049
00053 static void computeGradient(const Eigen::MatrixXf &image, Eigen::MatrixXf * dxp, Eigen::MatrixXf *dyp);
00054
00058 static double computeError(const Eigen::MatrixXf &error);
00059
00063 Eigen::MatrixXf computeJacobian(const Eigen::ArrayXf &dx, const Eigen::ArrayXf &dy) const;
00064
00068 Eigen::Matrix3f lieToH(const Eigen::VectorXf &lie) const;
00069
00073 Eigen::MatrixXf constructWarpedImage(const Eigen::MatrixXf &srcImage, const Eigen::MatrixXf &warpedPoints) const;
00074
00078 static Eigen::ArrayXf flattenMatrix(Eigen::MatrixXf &m);
00079
00080 };
00081
00082 }
00083
00084 #endif