libfovis
initial_homography_estimation.hpp
1 #ifndef __fovis_initial_homography_estimator_hpp__
2 #define __fovis_initial_homography_estimator_hpp__
3 
4 #include <vector>
5 #include <stdint.h>
6 #include <Eigen/Dense>
7 
8 namespace fovis
9 {
10 
15 public:
16  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
17 public:
23  void setTemplateImage(const uint8_t * grayData, int width, int height, int stride, int downsampleFactor);
24 
30  void setTestImage(const uint8_t * grayData, int width, int height, int stride, int downsampleFactor);
31 
37  Eigen::Matrix3f track(const Eigen::Matrix3f &init_H, int nIters, double *finalRMS);
38 
39 private:
40  int template_rows, template_cols; //size of the template
41  Eigen::MatrixXf templateImage, testImage; //the images
42  Eigen::MatrixXf warpedTestImage; //storage for the warped testImage on the current iteration
43  Eigen::MatrixXf errorIm; //the difference between the templateImage and the warpedTestImage
44  Eigen::ArrayXf templateDxRow, templateDyRow; //the gradient of the template flattened into a row vector
45  Eigen::MatrixXf templatePoints; //nx3 matrix storing the x,y,1 for each pixel
46  Eigen::ArrayXf xx, yy; //convenience array storing the original x/y for each pixel in the flattened image
47 
48  //internal functions
49 
53  static void computeGradient(const Eigen::MatrixXf &image, Eigen::MatrixXf * dxp, Eigen::MatrixXf *dyp);
54 
58  static double computeError(const Eigen::MatrixXf &error);
59 
63  Eigen::MatrixXf computeJacobian(const Eigen::ArrayXf &dx, const Eigen::ArrayXf &dy) const;
64 
68  Eigen::Matrix3f lieToH(const Eigen::VectorXf &lie) const;
69 
73  Eigen::MatrixXf constructWarpedImage(const Eigen::MatrixXf &srcImage, const Eigen::MatrixXf &warpedPoints) const;
74 
78  static Eigen::ArrayXf flattenMatrix(Eigen::MatrixXf &m);
79 
80 };
81 
82 }
83 
84 #endif
void setTestImage(const uint8_t *grayData, int width, int height, int stride, int downsampleFactor)
quick and dirty profiling tool.inspired by the matlab tic/toc command
Definition: camera_intrinsics.hpp:6
void setTemplateImage(const uint8_t *grayData, int width, int height, int stride, int downsampleFactor)
Estimates a rough 2D homography registering two images.
Definition: initial_homography_estimation.hpp:14
Eigen::Matrix3f track(const Eigen::Matrix3f &init_H, int nIters, double *finalRMS)