Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef NDTMATCHERFEATUREF2F_HH
00036 #define NDTMATCHERFEATUREF2F_HH
00037
00038 #include <ndt_registration/ndt_matcher_d2d.h>
00039 namespace lslgeneric
00040 {
00044 template <typename PointSource, typename PointTarget>
00045 class NDTMatcherFeatureD2D : public lslgeneric::NDTMatcherD2D<PointSource,PointTarget>
00046 {
00047 public:
00048 NDTMatcherFeatureD2D(const std::vector<std::pair<int, int> > &corr, double trimFactor = 1.) : _corr(corr), _trimFactor(trimFactor)
00049 {
00050 _goodCorr.resize(corr.size());
00051 std::fill(_goodCorr.begin(), _goodCorr.end(), true);
00052 }
00053
00072 bool covariance( lslgeneric::NDTMap<PointTarget>& target,
00073 lslgeneric::NDTMap<PointSource>& source,
00074 Eigen::Transform<double,3,Eigen::Affine,Eigen::ColMajor>& T,
00075 Eigen::Matrix<double,6,6> &cov
00076 );
00077
00078
00079 virtual double scoreNDT(std::vector<lslgeneric::NDTCell<PointSource>*> &source,
00080 lslgeneric::NDTMap<PointTarget> &target,
00081 Eigen::Transform<double,3,Eigen::Affine,Eigen::ColMajor>& T);
00082
00083
00084
00085
00086 virtual double derivativesNDT(
00087 const std::vector<NDTCell<PointSource>*> &sourceNDT,
00088 const NDTMap<PointTarget> &targetNDT,
00089 Eigen::MatrixXd &score_gradient,
00090 Eigen::MatrixXd &Hessian,
00091 bool computeHessian
00092 );
00093 #if 0
00094 virtual bool update_gradient_hessian(
00095 Eigen::Matrix<double,6,1> &score_gradient,
00096 Eigen::Matrix<double,6,6> &Hessian,
00097
00098 Eigen::Vector3d &m1,
00099 Eigen::Matrix3d &C1);
00100 #endif
00101
00102 using NDTMatcherD2D<PointSource,PointTarget>::Jest;
00103 using NDTMatcherD2D<PointSource,PointTarget>::Hest;
00104 using NDTMatcherD2D<PointSource,PointTarget>::Zest;
00105 using NDTMatcherD2D<PointSource,PointTarget>::ZHest;
00106 using NDTMatcherD2D<PointSource,PointTarget>::lfd1;
00107 using NDTMatcherD2D<PointSource,PointTarget>::lfd2;
00108 using NDTMatcherD2D<PointSource,PointTarget>::normalizeAngle;
00109 using NDTMatcherD2D<PointSource,PointTarget>::NUMBER_OF_ACTIVE_CELLS;
00110 protected:
00111 const std::vector<std::pair<int, int> > & _corr;
00112 double _trimFactor;
00113 std::vector<bool> _goodCorr;
00114 };
00115 }
00116
00117 #include <ndt_registration/impl/ndt_matcher_d2d_feature.hpp>
00118
00119 #endif