Skip to content

Commit 967d21c

Browse files
committed
Fix for new Transform::rotation() behavior for isometries
1 parent d9dec2d commit 967d21c

6 files changed

Lines changed: 22 additions & 12 deletions

examples/ransac_transform_estimator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ int main(int argc, char** argv) {
4848
// Randomly transform src
4949
cilantro::RigidTransform3f tform;
5050
tform.linear().setRandom();
51-
tform.linear() = tform.rotation();
51+
tform.linear() = cilantro::LinearTransform<float, 3, false>(tform.linear()).rotation();
5252
tform.translation().setRandom();
5353

5454
// Build noisy correspondences

include/cilantro/core/space_transformations.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class TransformSet : public internal::TransformSetBase<TransformT> {
121121
#pragma omp parallel for
122122
for (size_t i = 0; i < this->size(); i++) {
123123
(*this)[i] = other[i] * (*this)[i];
124-
(*this)[i].linear() = (*this)[i].rotation();
124+
(*this)[i].linear() = LinearTransform<Scalar, Dim, false>((*this)[i].linear()).rotation();
125125
}
126126
return *this;
127127
}
@@ -146,7 +146,7 @@ class TransformSet : public internal::TransformSetBase<TransformT> {
146146
#pragma omp parallel for
147147
for (size_t i = 0; i < this->size(); i++) {
148148
(*this)[i] = (*this)[i] * other[i];
149-
(*this)[i].linear() = (*this)[i].rotation();
149+
(*this)[i].linear() = LinearTransform<Scalar, Dim, false>((*this)[i].linear()).rotation();
150150
}
151151
return *this;
152152
}

include/cilantro/registration/icp_single_transform_combined_metric.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,9 @@ class CombinedMetricSingleTransformICP
205205
}
206206

207207
if constexpr (int(Base::Transform::Mode) == int(Eigen::Isometry)) {
208-
tform_iter.linear() = tform_iter.rotation();
208+
tform_iter.linear() =
209+
LinearTransform<typename TransformT::Scalar, TransformT::Dim, false>(tform_iter.linear())
210+
.rotation();
209211
}
210212

211213
this->transform_ = tform_iter * this->transform_;

include/cilantro/registration/icp_single_transform_point_to_point_metric.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,10 @@ class PointToPointMetricSingleTransformICP
5353
corr_getter_proxy.getPointToPointCorrespondences(),
5454
tform_iter);
5555

56-
if (int(Base::Transform::Mode) == int(Eigen::Isometry)) {
57-
tform_iter.linear() = tform_iter.rotation();
56+
if constexpr (int(Base::Transform::Mode) == int(Eigen::Isometry)) {
57+
tform_iter.linear() =
58+
LinearTransform<typename TransformT::Scalar, TransformT::Dim, false>(tform_iter.linear())
59+
.rotation();
5860
}
5961
this->transform_ = tform_iter * this->transform_;
6062
this->last_delta_norm_ =

include/cilantro/registration/warp_field_estimation.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ estimateDenseWarpFieldCombinedMetric(
707707
Eigen::AngleAxis<ScalarT>(tforms_vec[6 * i + 1], Eigen::Matrix<ScalarT, 3, 1>::UnitY()) *
708708
Eigen::AngleAxis<ScalarT>(tforms_vec[6 * i + 0], Eigen::Matrix<ScalarT, 3, 1>::UnitX()))
709709
.matrix();
710-
transforms[i].linear() = transforms[i].rotation();
710+
transforms[i].linear() = LinearTransform<ScalarT, 3, false>(transforms[i].linear()).rotation();
711711
transforms[i].translation() = tforms_vec.template segment<3>(6 * i + 3);
712712
}
713713

@@ -1838,7 +1838,7 @@ estimateSparseWarpFieldCombinedMetric(
18381838
Eigen::AngleAxis<ScalarT>(tforms_vec[6 * i + 1], Eigen::Matrix<ScalarT, 3, 1>::UnitY()) *
18391839
Eigen::AngleAxis<ScalarT>(tforms_vec[6 * i + 0], Eigen::Matrix<ScalarT, 3, 1>::UnitX()))
18401840
.matrix();
1841-
transforms[i].linear() = transforms[i].rotation();
1841+
transforms[i].linear() = LinearTransform<ScalarT, 3, false>(transforms[i].linear()).rotation();
18421842
transforms[i].translation() = tforms_vec.template segment<3>(6 * i + 3);
18431843
}
18441844

include/cilantro/registration/warp_field_utilities.hpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,11 @@ resampleTransforms(const TransformSet<TransformT>& old_transforms,
3636
} else {
3737
total_weight = (typename TransformT::Scalar)(1.0) / total_weight;
3838
new_transforms[i].linear() *= total_weight;
39-
if (int(TransformT::Mode) == int(Eigen::Isometry)) {
40-
new_transforms[i].linear() = new_transforms[i].rotation();
39+
if constexpr (int(TransformT::Mode) == int(Eigen::Isometry)) {
40+
new_transforms[i].linear() =
41+
LinearTransform<typename TransformT::Scalar, TransformT::Dim, false>(
42+
new_transforms[i].linear())
43+
.rotation();
4144
}
4245
new_transforms[i].translation() *= total_weight;
4346
}
@@ -88,8 +91,11 @@ resampleTransforms(
8891
} else {
8992
total_weight = (typename TransformT::Scalar)(1.0) / total_weight;
9093
new_transforms[i].linear() *= total_weight;
91-
if (int(TransformT::Mode) == int(Eigen::Isometry)) {
92-
new_transforms[i].linear() = new_transforms[i].rotation();
94+
if constexpr (int(TransformT::Mode) == int(Eigen::Isometry)) {
95+
new_transforms[i].linear() =
96+
LinearTransform<typename TransformT::Scalar, TransformT::Dim, false>(
97+
new_transforms[i].linear())
98+
.rotation();
9399
}
94100
new_transforms[i].translation() *= total_weight;
95101
}

0 commit comments

Comments
 (0)