11 #include <Eigen/Geometry>
24 typedef Eigen::Matrix<double, kDim, 1>
X_t;
25 typedef Eigen::Matrix<double, kDim, 1>
Y_t;
26 typedef Eigen::Matrix<double, kDim, 1>
M_t;
37 static std::vector<M_t>
Estimate(
const std::vector<X_t>& points1,
38 const std::vector<Y_t>& points2);
46 static void Residuals(
const std::vector<X_t>& points1,
47 const std::vector<Y_t>& points2,
48 const M_t& translation,
49 std::vector<double>* residuals);
57 std::vector<typename TranslationTransformEstimator<kDim>::M_t>
59 const std::vector<Y_t>& points2) {
60 CHECK_EQ(points1.size(), points2.size());
62 X_t mean_src = X_t::Zero();
63 Y_t mean_dst = Y_t::Zero();
65 for (
size_t i = 0; i < points1.size(); ++i) {
66 mean_src += points1[i];
67 mean_dst += points2[i];
70 mean_src /= points1.size();
71 mean_dst /= points2.size();
73 std::vector<M_t> models(1);
74 models[0] = mean_dst - mean_src;
81 const std::vector<X_t>& points1,
82 const std::vector<Y_t>& points2,
83 const M_t& translation,
84 std::vector<double>* residuals) {
85 CHECK_EQ(points1.size(), points2.size());
87 residuals->resize(points1.size());
89 for (
size_t i = 0; i < points1.size(); ++i) {
90 const M_t diff = points2[i] - points1[i] - translation;
91 (*residuals)[i] = diff.squaredNorm();