32 #define TEST_NAME "optim/ransac"
36 #include <Eigen/Geometry>
49 BOOST_CHECK_EQUAL(report.success,
false);
50 BOOST_CHECK_EQUAL(report.num_trials, 0);
51 BOOST_CHECK_EQUAL(report.support.num_inliers, 0);
52 BOOST_CHECK_EQUAL(report.support.residual_sum,
53 std::numeric_limits<double>::max());
54 BOOST_CHECK_EQUAL(report.inlier_mask.size(), 0);
60 const size_t num_samples = 1000;
61 const size_t num_outliers = 400;
65 Eigen::Vector3d(100, 10, 10));
68 std::vector<Eigen::Vector3d> src;
69 std::vector<Eigen::Vector3d> dst;
70 for (
size_t i = 0; i < num_samples; ++i) {
71 src.emplace_back(i, std::sqrt(i) + 2, std::sqrt(2 * i + 2));
72 dst.push_back(src.back());
77 for (
size_t i = 0; i < num_outliers; ++i) {
78 dst[i] = Eigen::Vector3d(
RandomReal(-3000.0, -2000.0),
88 const auto report = ransac.
Estimate(src, dst);
90 BOOST_CHECK_EQUAL(report.success,
true);
91 BOOST_CHECK_GT(report.num_trials, 0);
94 BOOST_CHECK_EQUAL(report.support.num_inliers, num_samples - num_outliers);
95 for (
size_t i = 0; i < num_samples; ++i) {
96 if (i < num_outliers) {
97 BOOST_CHECK(!report.inlier_mask[i]);
99 BOOST_CHECK(report.inlier_mask[i]);
104 const double matrix_diff =
105 (orig_tform.
Matrix().topLeftCorner<3, 4>() - report.model).norm();
106 BOOST_CHECK(std::abs(matrix_diff) < 1
e-6);
Report Estimate(const std::vector< typename Estimator::X_t > &X, const std::vector< typename Estimator::Y_t > &Y)
BOOST_AUTO_TEST_CASE(TestReport)
void SetPRNGSeed(unsigned seed)
Eigen::Vector4d ComposeIdentityQuaternion()
T RandomReal(const T min, const T max)