8 #include "pipelines/registration/TransformationEstimation.h"
13 #include <Eigen/Geometry>
17 namespace registration {
23 if (corres.empty())
return 0.0;
25 for (
const auto &c : corres) {
29 return std::sqrt(err / (
double)corres.size());
36 if (corres.empty())
return Eigen::Matrix4d::Identity();
37 Eigen::MatrixXd source_mat(3, corres.size());
38 Eigen::MatrixXd target_mat(3, corres.size());
39 for (
size_t i = 0; i < corres.size(); i++) {
40 source_mat.block<3, 1>(0, i) = source.
getEigenPoint(corres[i][0]);
41 target_mat.block<3, 1>(0, i) = target.
getEigenPoint(corres[i][1]);
50 if (corres.empty() || target.
hasNormals() ==
false)
return 0.0;
52 for (
const auto &c : corres) {
57 return std::sqrt(err / (
double)corres.size());
64 if (corres.empty() || target.
hasNormals() ==
false)
65 return Eigen::Matrix4d::Identity();
68 double &r,
double &w) {
69 const Eigen::Vector3d &vs = source.
getEigenPoint(corres[i][0]);
70 const Eigen::Vector3d &vt = target.
getEigenPoint(corres[i][1]);
72 r = (vs - vt).
dot(nt);
74 J_r.block<3, 1>(0, 0) = vs.cross(nt);
75 J_r.block<3, 1>(3, 0) = nt;
81 std::tie(JTJ, JTr, r2) =
84 compute_jacobian_and_residual, (int)corres.size());
87 Eigen::Matrix4d extrinsic;
88 std::tie(is_success, extrinsic) =
92 return is_success ? extrinsic : Eigen::Matrix4d::Identity();
A 3D cloud and its associated features (color, normals, scalar fields, etc.)
Eigen::Vector3d getEigenNormal(size_t index) const
bool hasNormals() const override
Returns whether normals are enabled or not.
Eigen::Vector3d getEigenPoint(size_t index) const
__host__ __device__ float dot(float2 a, float2 b)
Eigen::Matrix< double, 6, 1 > Vector6d
Eigen::Matrix< double, 6, 6 > Matrix6d
Extending Eigen namespace by adding frequently used matrix type.
std::vector< Eigen::Vector2i > CorrespondenceSet
std::tuple< bool, Eigen::Matrix4d > SolveJacobianSystemAndObtainExtrinsicMatrix(const Eigen::Matrix6d &JTJ, const Eigen::Vector6d &JTr)
std::tuple< MatType, VecType, double > ComputeJTJandJTr(std::function< void(int, VecType &, double &, double &)> f, int iteration_num, bool verbose=true)
Generic file read and write utility for python interface.