ElTriunfador

ModelTracker.h

Jan 14th, 2016
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.95 KB | None | 0 0
  1. #pragma once
  2. #include "VoxelGrid.h"
  3. #include "VoxelGrid.cuh"
  4. #include <Eigen\Dense>
  5. #include "LieAlgebra.h"
  6. #include <fstream>
  7. #include <opencv\highgui.h>
  8. #include <omp.h>
  9. class ModelTracker :
  10.     public VoxelGrid
  11. {
  12. private:
  13.     double RAYTHRESHOLD, DELTADERIV, DIFFTHRES;
  14.     int RESOLUTION;
  15.     const int MAXITR = 12;
  16.     const int MAXOPTITR = 15;
  17.     const double MAXDISTANCE = 10;
  18.     double interpolate(const Eigen::Vector3d &p);
  19.     Eigen::Vector3d getVoxelDoubleCoord(const Eigen::Vector3d &p);
  20.     Eigen::Vector3d getIntWeights(const Eigen::Vector3d &p);
  21.     Eigen::Vector3i getVoxelIntCoord(const Eigen::Vector3d &p);
  22.  
  23.     double interpolate(const Eigen::Vector3i &p, const Eigen::Vector3d &w);
  24.  
  25.     bool checkIndices(const Eigen::Vector3i &p);
  26.     bool checkIndices(const Eigen::Vector3d &p);
  27.     bool checkGradient(const Eigen::VectorXd &grad);
  28.     bool checkGradient(float *grad);
  29.     bool checkWeights(int i, int j, int k);
  30.     bool checkWeights(const Eigen::Vector3i &p);
  31.  
  32.     void computeAnalyticLSqRay(const Eigen::VectorXd &Xi, const cv::Mat &depthImg);
  33.     double sumErrorIndPredicted(const cv::Mat &depthImg, const Eigen::VectorXd &Xi);
  34.  
  35.     Eigen::VectorXd getRayAnalyticGradient(Eigen::Vector3d &w, Eigen::Vector3d &t, Eigen::Vector3d &pLocal,
  36.         const double V0Ray, const double V0Dx, const double V0Dy, const double V0Dz, const double delta,
  37.         const double i, const double j, const double z);
  38.     Eigen::MatrixXd getDerivative(Eigen::Vector3d &w, Eigen::Vector3d &x);
  39.     double sumGPUErrorPredicted(const cv::Mat &depthImg,Eigen::VectorXd &Xitmp);
  40.     void cpyToCamera(double *ptrCamGlobal, Eigen::Matrix4d &camera);
  41.     cv::Mat getErrorMatrix(double *error, const int rows, const int cols);
  42.     cv::Mat GPUrayCast(const Eigen::VectorXd &Xi, const cv::Mat &depthImg);
  43.     void CPUcomputeAnalyticLSqRay(const Eigen::VectorXd &Xi, const cv::Mat &depthImg);
  44. protected:
  45.     Eigen::MatrixXd ALsq, ALsqRGB;
  46.     Eigen::VectorXd bLsq, bLsqRGB;
  47.  
  48. public:
  49.     ModelTracker(const double GRIDDIM, const int RESOLUTION, const double DELTA, const double EPSILON, const double SIGMA, const double FX, const double FY, const double CX, const double CY, const double raythreshold, const double deltaDeriv, const double diffThres);
  50.     ~ModelTracker();
  51.     void getRayErrorFunction(const Eigen::VectorXd &Xi, const cv::Mat &depthImg);
  52.     double getRayError(const float i, const float j, const float z,
  53.         const Eigen::Matrix3f &R, const Eigen::Vector3f &t, const Eigen::Vector3f &start);
  54.     //double getRayError(const float i, const float j, const float z, const Eigen::Matrix3d &R, const Eigen::Vector3d &t);
  55.  
  56.     Eigen::VectorXd optimize(const Eigen::VectorXd &XiInit,
  57.         const cv::Mat &depthImg);
  58.     double traverseRay(const Eigen::Vector3d &ray, const Eigen::Vector3d &start, double pDist);
  59.     cv::Mat rayCast(const Eigen::VectorXd &Xi, const cv::Mat &depthImg);
  60.     double3 getStart();
  61.     void testGPURayCast(const Eigen::VectorXd &Xi, const cv::Mat &depthImg);
  62.     Eigen::VectorXd optimizeCPU(const Eigen::VectorXd &XiInit, const cv::Mat &depthImg);
  63.  
  64. };
Add Comment
Please, Sign In to add comment