32 #define TEST_NAME "estimators/essential_matrix"
48 const double points1_raw[] = {
49 0.4964, 1.0577, 0.3650, -0.0919, -0.5412, 0.0159, -0.5239, 0.9467,
50 0.3467, 0.5301, 0.2797, 0.0012, -0.1986, 0.0460, -0.1622, 0.5347,
51 0.0796, 0.2379, -0.3946, 0.7969, 0.2, 0.7, 0.6, 0.3};
53 const double points2_raw[] = {
54 0.7570, 2.7340, 0.3961, 0.6981, -0.6014, 0.7110, -0.7385, 2.2712,
55 0.4177, 1.2132, 0.3052, 0.4835, -0.2171, 0.5057, -0.2059, 1.1583,
56 0.0946, 0.7013, -0.6236, 3.0253, 0.5, 0.9, 0.9, 0.2};
58 const size_t num_points = 12;
60 std::vector<Eigen::Vector2d> points1(num_points);
61 std::vector<Eigen::Vector2d> points2(num_points);
62 for (
size_t i = 0; i < num_points; ++i) {
63 points1[i] = Eigen::Vector2d(points1_raw[2 * i], points1_raw[2 * i + 1]);
64 points2[i] = Eigen::Vector2d(points2_raw[2 * i], points2_raw[2 * i + 1]);
77 const auto report = ransac.
Estimate(points1, points2);
79 std::vector<double> residuals;
83 for (
size_t i = 0; i < 10; ++i) {
87 BOOST_CHECK(!report.inlier_mask[10]);
88 BOOST_CHECK(!report.inlier_mask[11]);
92 const double points1_raw[] = {1.839035, 1.924743, 0.543582, 0.375221,
93 0.473240, 0.142522, 0.964910, 0.598376,
94 0.102388, 0.140092, 15.994343, 9.622164,
95 0.285901, 0.430055, 0.091150, 0.254594};
97 const double points2_raw[] = {
98 1.002114, 1.129644, 1.521742, 1.846002, 1.084332, 0.275134,
99 0.293328, 0.588992, 0.839509, 0.087290, 1.779735, 1.116857,
100 0.878616, 0.602447, 0.642616, 1.028681,
103 const size_t kNumPoints = 8;
104 std::vector<Eigen::Vector2d> points1(kNumPoints);
105 std::vector<Eigen::Vector2d> points2(kNumPoints);
106 for (
size_t i = 0; i < kNumPoints; ++i) {
107 points1[i] = Eigen::Vector2d(points1_raw[2 * i], points1_raw[2 * i + 1]);
108 points2[i] = Eigen::Vector2d(points2_raw[2 * i], points2_raw[2 * i + 1]);
112 const auto E = estimator.
Estimate(points1, points2)[0];
115 BOOST_CHECK(std::abs(E(0, 0) - -0.0368602) < 1
e-5);
116 BOOST_CHECK(std::abs(E(0, 1) - 0.265019) < 1
e-5);
117 BOOST_CHECK(std::abs(E(0, 2) - -0.0625948) < 1
e-5);
118 BOOST_CHECK(std::abs(E(1, 0) - -0.299679) < 1
e-5);
119 BOOST_CHECK(std::abs(E(1, 1) - -0.110667) < 1
e-5);
120 BOOST_CHECK(std::abs(E(1, 2) - 0.147114) < 1
e-5);
121 BOOST_CHECK(std::abs(E(2, 0) - 0.169381) < 1
e-5);
122 BOOST_CHECK(std::abs(E(2, 1) - -0.21072) < 1
e-5);
123 BOOST_CHECK(std::abs(E(2, 2) - -0.00401306) < 1
e-5);
127 Eigen::JacobiSVD<Eigen::Matrix3d> svd(E);
128 Eigen::Vector3d s = svd.singularValues();
129 BOOST_CHECK(std::abs(s(0) - s(1)) < 1
e-5);
130 BOOST_CHECK(std::abs(s(2)) < 1
e-5);
BOOST_AUTO_TEST_CASE(TestDecomposeEssentialMatrix)
static std::vector< M_t > Estimate(const std::vector< X_t > &points1, const std::vector< Y_t > &points2)
static void Residuals(const std::vector< X_t > &points1, const std::vector< Y_t > &points2, const M_t &E, std::vector< double > *residuals)
Report Estimate(const std::vector< typename Estimator::X_t > &X, const std::vector< typename Estimator::Y_t > &Y)
void SetPRNGSeed(unsigned seed)