32 #define TEST_NAME "base/image"
42 BOOST_CHECK_EQUAL(
image.Name(),
"");
44 BOOST_CHECK_EQUAL(
image.HasCamera(),
false);
45 BOOST_CHECK_EQUAL(
image.IsRegistered(),
false);
46 BOOST_CHECK_EQUAL(
image.NumPoints2D(), 0);
47 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 0);
48 BOOST_CHECK_EQUAL(
image.NumObservations(), 0);
49 BOOST_CHECK_EQUAL(
image.NumCorrespondences(), 0);
50 BOOST_CHECK_EQUAL(
image.NumVisiblePoints3D(), 0);
51 BOOST_CHECK_EQUAL(
image.Point3DVisibilityScore(), 0);
52 BOOST_CHECK_EQUAL(
image.Qvec(0), 1.0);
53 BOOST_CHECK_EQUAL(
image.Qvec(1), 0.0);
54 BOOST_CHECK_EQUAL(
image.Qvec(2), 0.0);
55 BOOST_CHECK_EQUAL(
image.Qvec(3), 0.0);
60 BOOST_CHECK_EQUAL(
image.Tvec(0), 0.0);
61 BOOST_CHECK_EQUAL(
image.Tvec(1), 0.0);
62 BOOST_CHECK_EQUAL(
image.Tvec(2), 0.0);
66 BOOST_CHECK_EQUAL(
image.HasQvecPrior(),
false);
67 BOOST_CHECK_EQUAL(
image.HasTvecPrior(),
false);
68 BOOST_CHECK_EQUAL(
image.Points2D().size(), 0);
75 BOOST_CHECK_EQUAL(
image.ImageId(), 1);
80 BOOST_CHECK_EQUAL(
image.Name(),
"");
81 image.SetName(
"test1");
82 BOOST_CHECK_EQUAL(
image.Name(),
"test1");
83 image.Name() =
"test2";
84 BOOST_CHECK_EQUAL(
image.Name(),
"test2");
91 BOOST_CHECK_EQUAL(
image.CameraId(), 1);
96 BOOST_CHECK_EQUAL(
image.IsRegistered(),
false);
97 image.SetRegistered(
true);
98 BOOST_CHECK_EQUAL(
image.IsRegistered(),
true);
99 image.SetRegistered(
false);
100 BOOST_CHECK_EQUAL(
image.IsRegistered(),
false);
105 BOOST_CHECK_EQUAL(
image.NumPoints2D(), 0);
106 image.SetPoints2D(std::vector<Eigen::Vector2d>(10));
107 BOOST_CHECK_EQUAL(
image.NumPoints2D(), 10);
112 image.SetPoints2D(std::vector<Eigen::Vector2d>(10));
113 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 0);
114 image.SetPoint3DForPoint2D(0, 0);
115 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 1);
116 image.SetPoint3DForPoint2D(0, 1);
117 image.SetPoint3DForPoint2D(1, 2);
118 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 2);
123 BOOST_CHECK_EQUAL(
image.NumObservations(), 0);
124 image.SetNumObservations(10);
125 BOOST_CHECK_EQUAL(
image.NumObservations(), 10);
130 BOOST_CHECK_EQUAL(
image.NumCorrespondences(), 0);
131 image.SetNumCorrespondences(10);
132 BOOST_CHECK_EQUAL(
image.NumCorrespondences(), 10);
137 image.SetPoints2D(std::vector<Eigen::Vector2d>(10));
138 image.SetNumObservations(10);
143 BOOST_CHECK_EQUAL(
image.NumVisiblePoints3D(), 0);
144 image.IncrementCorrespondenceHasPoint3D(0);
145 BOOST_CHECK_EQUAL(
image.NumVisiblePoints3D(), 1);
146 image.IncrementCorrespondenceHasPoint3D(0);
147 image.IncrementCorrespondenceHasPoint3D(1);
148 BOOST_CHECK_EQUAL(
image.NumVisiblePoints3D(), 2);
149 image.DecrementCorrespondenceHasPoint3D(0);
150 BOOST_CHECK_EQUAL(
image.NumVisiblePoints3D(), 2);
151 image.DecrementCorrespondenceHasPoint3D(0);
152 BOOST_CHECK_EQUAL(
image.NumVisiblePoints3D(), 1);
153 image.DecrementCorrespondenceHasPoint3D(1);
154 BOOST_CHECK_EQUAL(
image.NumVisiblePoints3D(), 0);
159 std::vector<Eigen::Vector2d> points2D;
160 for (
size_t i = 0; i < 4; ++i) {
161 for (
size_t j = 0; j < 4; ++j) {
162 points2D.emplace_back(i, j);
165 image.SetPoints2D(points2D);
166 image.SetNumObservations(16);
171 Eigen::Matrix<size_t, Eigen::Dynamic, 1> scores(
172 image.kNumPoint3DVisibilityPyramidLevels, 1);
173 for (
int i = 1; i <=
image.kNumPoint3DVisibilityPyramidLevels; ++i) {
174 scores(i - 1) = (1 << i) * (1 << i);
176 BOOST_CHECK_EQUAL(
image.Point3DVisibilityScore(), 0);
177 image.IncrementCorrespondenceHasPoint3D(0);
178 BOOST_CHECK_EQUAL(
image.Point3DVisibilityScore(), scores.sum());
179 image.IncrementCorrespondenceHasPoint3D(0);
180 BOOST_CHECK_EQUAL(
image.Point3DVisibilityScore(), scores.sum());
181 image.IncrementCorrespondenceHasPoint3D(1);
182 BOOST_CHECK_EQUAL(
image.Point3DVisibilityScore(),
183 scores.sum() + scores.bottomRows(scores.size() - 1).sum());
184 image.IncrementCorrespondenceHasPoint3D(1);
185 image.IncrementCorrespondenceHasPoint3D(1);
186 image.IncrementCorrespondenceHasPoint3D(4);
188 image.Point3DVisibilityScore(),
189 scores.sum() + 2 * scores.bottomRows(scores.size() - 1).sum());
190 image.IncrementCorrespondenceHasPoint3D(4);
191 image.IncrementCorrespondenceHasPoint3D(5);
193 image.Point3DVisibilityScore(),
194 scores.sum() + 3 * scores.bottomRows(scores.size() - 1).sum());
195 image.DecrementCorrespondenceHasPoint3D(0);
197 image.Point3DVisibilityScore(),
198 scores.sum() + 3 * scores.bottomRows(scores.size() - 1).sum());
199 image.DecrementCorrespondenceHasPoint3D(0);
201 image.Point3DVisibilityScore(),
202 scores.sum() + 2 * scores.bottomRows(scores.size() - 1).sum());
203 image.IncrementCorrespondenceHasPoint3D(2);
205 image.Point3DVisibilityScore(),
206 2 * scores.sum() + 2 * scores.bottomRows(scores.size() - 1).sum());
211 BOOST_CHECK_EQUAL(
image.Qvec(0), 1.0);
212 BOOST_CHECK_EQUAL(
image.Qvec(1), 0.0);
213 BOOST_CHECK_EQUAL(
image.Qvec(2), 0.0);
214 BOOST_CHECK_EQUAL(
image.Qvec(3), 0.0);
216 BOOST_CHECK_EQUAL(
image.Qvec(0), 2.0);
217 image.SetQvec(Eigen::Vector4d(3.0, 0.0, 0.0, 0.0));
218 BOOST_CHECK_EQUAL(
image.Qvec(0), 3.0);
219 image.Qvec() = Eigen::Vector4d(4.0, 0.0, 0.0, 0.0);
220 BOOST_CHECK_EQUAL(
image.Qvec(0), 4.0);
229 BOOST_CHECK_EQUAL(
image.HasQvecPrior(),
false);
230 image.QvecPrior(0) = 2.0;
231 BOOST_CHECK_EQUAL(
image.HasQvecPrior(),
false);
232 image.QvecPrior(1) = 2.0;
233 BOOST_CHECK_EQUAL(
image.HasQvecPrior(),
false);
234 image.QvecPrior(2) = 2.0;
235 BOOST_CHECK_EQUAL(
image.HasQvecPrior(),
false);
236 image.QvecPrior(3) = 2.0;
237 BOOST_CHECK_EQUAL(
image.HasQvecPrior(),
true);
238 BOOST_CHECK_EQUAL(
image.QvecPrior(0), 2.0);
239 BOOST_CHECK_EQUAL(
image.QvecPrior(1), 2.0);
240 BOOST_CHECK_EQUAL(
image.QvecPrior(2), 2.0);
241 BOOST_CHECK_EQUAL(
image.QvecPrior(3), 2.0);
242 image.SetQvecPrior(Eigen::Vector4d(3.0, 0.0, 0.0, 0.0));
243 BOOST_CHECK_EQUAL(
image.QvecPrior(0), 3.0);
244 image.QvecPrior() = Eigen::Vector4d(4.0, 0.0, 0.0, 0.0);
245 BOOST_CHECK_EQUAL(
image.QvecPrior(0), 4.0);
250 BOOST_CHECK_EQUAL(
image.Tvec(0), 0.0);
251 BOOST_CHECK_EQUAL(
image.Tvec(1), 0.0);
252 BOOST_CHECK_EQUAL(
image.Tvec(2), 0.0);
254 BOOST_CHECK_EQUAL(
image.Tvec(0), 2.0);
255 image.SetTvec(Eigen::Vector3d(3.0, 0.0, 0.0));
256 BOOST_CHECK_EQUAL(
image.Tvec(0), 3.0);
257 image.Tvec() = Eigen::Vector3d(4.0, 0.0, 0.0);
258 BOOST_CHECK_EQUAL(
image.Tvec(0), 4.0);
266 BOOST_CHECK_EQUAL(
image.HasTvecPrior(),
false);
267 image.TvecPrior(0) = 2.0;
268 BOOST_CHECK_EQUAL(
image.HasTvecPrior(),
false);
269 image.TvecPrior(1) = 2.0;
270 BOOST_CHECK_EQUAL(
image.HasTvecPrior(),
false);
271 image.TvecPrior(2) = 2.0;
272 BOOST_CHECK_EQUAL(
image.HasTvecPrior(),
true);
273 BOOST_CHECK_EQUAL(
image.TvecPrior(0), 2.0);
274 BOOST_CHECK_EQUAL(
image.TvecPrior(1), 2.0);
275 BOOST_CHECK_EQUAL(
image.TvecPrior(2), 2.0);
276 image.SetTvecPrior(Eigen::Vector3d(3.0, 0.0, 0.0));
277 BOOST_CHECK_EQUAL(
image.TvecPrior(0), 3.0);
278 image.TvecPrior() = Eigen::Vector3d(4.0, 0.0, 0.0);
279 BOOST_CHECK_EQUAL(
image.TvecPrior(0), 4.0);
284 BOOST_CHECK_EQUAL(
image.Points2D().size(), 0);
285 std::vector<Eigen::Vector2d> points2D(10);
286 points2D[0] = Eigen::Vector2d(1.0, 2.0);
287 image.SetPoints2D(points2D);
288 BOOST_CHECK_EQUAL(
image.Points2D().size(), 10);
289 BOOST_CHECK_EQUAL(
image.Point2D(0).X(), 1.0);
290 BOOST_CHECK_EQUAL(
image.Point2D(0).Y(), 2.0);
295 image.SetPoints2D(std::vector<Eigen::Vector2d>(2));
296 BOOST_CHECK(!
image.Point2D(0).HasPoint3D());
297 BOOST_CHECK(!
image.Point2D(1).HasPoint3D());
298 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 0);
299 image.SetPoint3DForPoint2D(0, 0);
300 BOOST_CHECK(
image.Point2D(0).HasPoint3D());
301 BOOST_CHECK(!
image.Point2D(1).HasPoint3D());
302 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 1);
303 BOOST_CHECK(
image.HasPoint3D(0));
304 image.SetPoint3DForPoint2D(0, 1);
305 BOOST_CHECK(
image.Point2D(0).HasPoint3D());
306 BOOST_CHECK(!
image.Point2D(1).HasPoint3D());
307 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 1);
308 BOOST_CHECK(!
image.HasPoint3D(0));
309 BOOST_CHECK(
image.HasPoint3D(1));
310 image.SetPoint3DForPoint2D(1, 0);
311 BOOST_CHECK(
image.Point2D(0).HasPoint3D());
312 BOOST_CHECK(
image.Point2D(1).HasPoint3D());
313 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 2);
314 BOOST_CHECK(
image.HasPoint3D(0));
315 BOOST_CHECK(
image.HasPoint3D(1));
316 image.ResetPoint3DForPoint2D(0);
317 BOOST_CHECK(!
image.Point2D(0).HasPoint3D());
318 BOOST_CHECK(
image.Point2D(1).HasPoint3D());
319 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 1);
320 BOOST_CHECK(
image.HasPoint3D(0));
321 BOOST_CHECK(!
image.HasPoint3D(1));
322 image.ResetPoint3DForPoint2D(1);
323 BOOST_CHECK(!
image.Point2D(0).HasPoint3D());
324 BOOST_CHECK(!
image.Point2D(1).HasPoint3D());
325 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 0);
326 BOOST_CHECK(!
image.HasPoint3D(0));
327 BOOST_CHECK(!
image.HasPoint3D(1));
328 image.ResetPoint3DForPoint2D(0);
329 BOOST_CHECK(!
image.Point2D(0).HasPoint3D());
330 BOOST_CHECK(!
image.Point2D(1).HasPoint3D());
331 BOOST_CHECK_EQUAL(
image.NumPoints3D(), 0);
332 BOOST_CHECK(!
image.HasPoint3D(0));
333 BOOST_CHECK(!
image.HasPoint3D(1));
338 BOOST_CHECK_LT(std::abs(
image.Qvec().norm() - 1.0), 1
e-10);
340 BOOST_CHECK_LT(std::abs(
image.Qvec().norm() - 2.0), 1
e-10);
341 image.NormalizeQvec();
342 BOOST_CHECK_LT(std::abs(
image.Qvec().norm() - 1.0), 1
e-10);
347 BOOST_CHECK(
image.ProjectionMatrix().isApprox(Eigen::Matrix3x4d::Identity()));
353 image.InverseProjectionMatrix().isApprox(Eigen::Matrix3x4d::Identity()));
358 BOOST_CHECK(
image.RotationMatrix().isApprox(Eigen::Matrix3d::Identity()));
363 BOOST_CHECK(
image.ProjectionCenter().isApprox(Eigen::Vector3d::Zero()));
368 BOOST_CHECK(
image.ViewingDirection().isApprox(Eigen::Vector3d(0, 0, 1)));
std::shared_ptr< core::Tensor > image
void SetWidth(const size_t width)
void SetHeight(const size_t height)
BOOST_AUTO_TEST_CASE(TestDefault)
const camera_t kInvalidCameraId
const image_t kInvalidImageId
bool IsNaN(const float x)