ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
correspondence_graph_test.cc
Go to the documentation of this file.
1 // Copyright (c) 2018, ETH Zurich and UNC Chapel Hill.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 //
7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 //
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 //
14 // * Neither the name of ETH Zurich and UNC Chapel Hill nor the names of
15 // its contributors may be used to endorse or promote products derived
16 // from this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 // POSSIBILITY OF SUCH DAMAGE.
29 //
30 // Author: Johannes L. Schoenberger (jsch-at-demuc-dot-de)
31 
32 #define TEST_NAME "base/correspondence_graph"
33 #include "util/testing.h"
34 
36 
37 using namespace colmap;
38 
39 BOOST_AUTO_TEST_CASE(TestDefault) {
40  CorrespondenceGraph correspondence_graph;
41  BOOST_CHECK_EQUAL(correspondence_graph.NumImages(), 0);
42  BOOST_CHECK_EQUAL(
43  correspondence_graph.NumCorrespondencesBetweenImages().size(), 0);
44 }
45 
46 BOOST_AUTO_TEST_CASE(TestTwoView) {
47  CorrespondenceGraph correspondence_graph;
48  correspondence_graph.AddImage(0, 10);
49  correspondence_graph.AddImage(1, 10);
50  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(0), true);
51  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(1), true);
52  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(2), false);
53  BOOST_CHECK_EQUAL(correspondence_graph.NumImages(), 2);
54  BOOST_CHECK_EQUAL(
55  correspondence_graph.NumCorrespondencesBetweenImages().size(), 0);
56  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 0);
57  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 0);
58  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 0);
59  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 0);
60  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesBetweenImages(0, 1),
61  0);
62  for (size_t i = 0; i < 10; ++i) {
63  BOOST_CHECK(!correspondence_graph.HasCorrespondences(0, i));
64  BOOST_CHECK(!correspondence_graph.HasCorrespondences(1, i));
65  BOOST_CHECK(!correspondence_graph.IsTwoViewObservation(0, i));
66  BOOST_CHECK(!correspondence_graph.IsTwoViewObservation(1, i));
67  }
68  FeatureMatches matches(4);
69  matches[0].point2D_idx1 = 0;
70  matches[0].point2D_idx2 = 0;
71  matches[1].point2D_idx1 = 1;
72  matches[1].point2D_idx2 = 2;
73  matches[2].point2D_idx1 = 3;
74  matches[2].point2D_idx2 = 7;
75  matches[3].point2D_idx1 = 4;
76  matches[3].point2D_idx2 = 8;
77  correspondence_graph.AddCorrespondences(0, 1, matches);
78  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 0);
79  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 0);
80  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 4);
81  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 4);
82  const image_pair_t pair_id = Database::ImagePairToPairId(0, 1);
83  BOOST_CHECK_EQUAL(
84  correspondence_graph.NumCorrespondencesBetweenImages().size(), 1);
85  BOOST_CHECK_EQUAL(
86  correspondence_graph.NumCorrespondencesBetweenImages().at(pair_id), 4);
87  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(0, 0).size(), 1);
88  BOOST_CHECK(correspondence_graph.HasCorrespondences(0, 0));
89  BOOST_CHECK(correspondence_graph.IsTwoViewObservation(0, 0));
90  BOOST_CHECK_EQUAL(
91  correspondence_graph.FindCorrespondences(0, 0).at(0).image_id, 1);
92  BOOST_CHECK_EQUAL(
93  correspondence_graph.FindCorrespondences(0, 0).at(0).point2D_idx, 0);
94  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(1, 0).size(), 1);
95  BOOST_CHECK(correspondence_graph.HasCorrespondences(1, 0));
96  BOOST_CHECK(correspondence_graph.IsTwoViewObservation(1, 0));
97  BOOST_CHECK_EQUAL(
98  correspondence_graph.FindCorrespondences(1, 0).at(0).image_id, 0);
99  BOOST_CHECK_EQUAL(
100  correspondence_graph.FindCorrespondences(1, 0).at(0).point2D_idx, 0);
101  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(0, 1).size(), 1);
102  BOOST_CHECK(correspondence_graph.HasCorrespondences(0, 1));
103  BOOST_CHECK(correspondence_graph.IsTwoViewObservation(0, 1));
104  BOOST_CHECK_EQUAL(
105  correspondence_graph.FindCorrespondences(0, 1).at(0).image_id, 1);
106  BOOST_CHECK_EQUAL(
107  correspondence_graph.FindCorrespondences(0, 1).at(0).point2D_idx, 2);
108  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(1, 2).size(), 1);
109  BOOST_CHECK(correspondence_graph.HasCorrespondences(1, 2));
110  BOOST_CHECK(correspondence_graph.IsTwoViewObservation(1, 2));
111  BOOST_CHECK_EQUAL(
112  correspondence_graph.FindCorrespondences(1, 2).at(0).image_id, 0);
113  BOOST_CHECK_EQUAL(
114  correspondence_graph.FindCorrespondences(1, 2).at(0).point2D_idx, 1);
115  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(0, 4).size(), 1);
116  BOOST_CHECK(correspondence_graph.HasCorrespondences(0, 3));
117  BOOST_CHECK(correspondence_graph.IsTwoViewObservation(0, 4));
118  BOOST_CHECK_EQUAL(
119  correspondence_graph.FindCorrespondences(0, 3).at(0).image_id, 1);
120  BOOST_CHECK_EQUAL(
121  correspondence_graph.FindCorrespondences(0, 3).at(0).point2D_idx, 7);
122  BOOST_CHECK_EQUAL(
123  correspondence_graph.FindCorrespondences(0, 4).at(0).image_id, 1);
124  BOOST_CHECK_EQUAL(
125  correspondence_graph.FindCorrespondences(0, 4).at(0).point2D_idx, 8);
126  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(1, 7).size(), 1);
127  BOOST_CHECK(correspondence_graph.HasCorrespondences(1, 7));
128  BOOST_CHECK(correspondence_graph.IsTwoViewObservation(1, 7));
129  BOOST_CHECK_EQUAL(
130  correspondence_graph.FindCorrespondences(1, 7).at(0).image_id, 0);
131  BOOST_CHECK_EQUAL(
132  correspondence_graph.FindCorrespondences(1, 7).at(0).point2D_idx, 3);
133  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(1, 8).size(), 1);
134  BOOST_CHECK(correspondence_graph.HasCorrespondences(1, 8));
135  BOOST_CHECK(correspondence_graph.IsTwoViewObservation(1, 8));
136  BOOST_CHECK_EQUAL(
137  correspondence_graph.FindCorrespondences(1, 8).at(0).image_id, 0);
138  BOOST_CHECK_EQUAL(
139  correspondence_graph.FindCorrespondences(1, 8).at(0).point2D_idx, 4);
140  for (size_t i = 0; i < 10; ++i) {
141  BOOST_CHECK_EQUAL(
142  correspondence_graph.FindTransitiveCorrespondences(0, i, 0).size(), 0);
143  BOOST_CHECK_EQUAL(
144  correspondence_graph.FindCorrespondences(0, i).size(),
145  correspondence_graph.FindTransitiveCorrespondences(0, i, 1).size());
146  BOOST_CHECK_EQUAL(
147  correspondence_graph.FindCorrespondences(0, i).size(),
148  correspondence_graph.FindTransitiveCorrespondences(0, i, 2).size());
149  BOOST_CHECK_EQUAL(
150  correspondence_graph.FindTransitiveCorrespondences(1, i, 0).size(), 0);
151  BOOST_CHECK_EQUAL(
152  correspondence_graph.FindCorrespondences(1, i).size(),
153  correspondence_graph.FindTransitiveCorrespondences(1, i, 1).size());
154  BOOST_CHECK_EQUAL(
155  correspondence_graph.FindCorrespondences(1, i).size(),
156  correspondence_graph.FindTransitiveCorrespondences(1, i, 2).size());
157  }
158  const auto corrs01 =
159  correspondence_graph.FindCorrespondencesBetweenImages(0, 1);
160  const auto corrs10 =
161  correspondence_graph.FindCorrespondencesBetweenImages(1, 0);
162  BOOST_CHECK_EQUAL(corrs01.size(), matches.size());
163  BOOST_CHECK_EQUAL(corrs10.size(), matches.size());
164  for (size_t i = 0; i < corrs01.size(); ++i) {
165  BOOST_CHECK_EQUAL(corrs01[i].point2D_idx1, corrs10[i].point2D_idx2);
166  BOOST_CHECK_EQUAL(corrs01[i].point2D_idx2, corrs10[i].point2D_idx1);
167  BOOST_CHECK_EQUAL(matches[i].point2D_idx1, corrs01[i].point2D_idx1);
168  BOOST_CHECK_EQUAL(matches[i].point2D_idx2, corrs01[i].point2D_idx2);
169  }
170  correspondence_graph.Finalize();
171  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 4);
172  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 4);
173  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 4);
174  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 4);
175 }
176 
177 BOOST_AUTO_TEST_CASE(TestThreeView) {
178  CorrespondenceGraph correspondence_graph;
179  correspondence_graph.AddImage(0, 10);
180  correspondence_graph.AddImage(1, 10);
181  correspondence_graph.AddImage(2, 10);
182  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(0), true);
183  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(1), true);
184  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(2), true);
185  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(3), false);
186  BOOST_CHECK_EQUAL(correspondence_graph.NumImages(), 3);
187  BOOST_CHECK_EQUAL(
188  correspondence_graph.NumCorrespondencesBetweenImages().size(), 0);
189  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 0);
190  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 0);
191  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(2), 0);
192  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 0);
193  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 0);
194  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(2), 0);
195  for (size_t i = 0; i < 10; ++i) {
196  BOOST_CHECK(!correspondence_graph.HasCorrespondences(0, i));
197  BOOST_CHECK(!correspondence_graph.HasCorrespondences(1, i));
198  BOOST_CHECK(!correspondence_graph.HasCorrespondences(2, i));
199  BOOST_CHECK(!correspondence_graph.IsTwoViewObservation(0, i));
200  BOOST_CHECK(!correspondence_graph.IsTwoViewObservation(1, i));
201  BOOST_CHECK(!correspondence_graph.IsTwoViewObservation(2, i));
202  }
203  FeatureMatches matches01(1);
204  matches01[0].point2D_idx1 = 0;
205  matches01[0].point2D_idx2 = 0;
206  correspondence_graph.AddCorrespondences(0, 1, matches01);
207  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 0);
208  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 0);
209  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(2), 0);
210  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 1);
211  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 1);
212  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(2), 0);
213  FeatureMatches matches02(1);
214  matches02[0].point2D_idx1 = 0;
215  matches02[0].point2D_idx2 = 0;
216  correspondence_graph.AddCorrespondences(0, 2, matches02);
217  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 0);
218  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 0);
219  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(2), 0);
220  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 2);
221  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 1);
222  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(2), 1);
223  FeatureMatches matches12(2);
224  matches12[0].point2D_idx1 = 0;
225  matches12[0].point2D_idx2 = 0;
226  matches12[1].point2D_idx1 = 5;
227  matches12[1].point2D_idx2 = 5;
228  correspondence_graph.AddCorrespondences(1, 2, matches12);
229  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 0);
230  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 0);
231  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(2), 0);
232  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 2);
233  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 3);
234  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(2), 3);
235  const image_pair_t pair_id01 = Database::ImagePairToPairId(0, 1);
236  const image_pair_t pair_id02 = Database::ImagePairToPairId(0, 2);
237  const image_pair_t pair_id12 = Database::ImagePairToPairId(1, 2);
238  BOOST_CHECK_EQUAL(
239  correspondence_graph.NumCorrespondencesBetweenImages().size(), 3);
240  BOOST_CHECK_EQUAL(
241  correspondence_graph.NumCorrespondencesBetweenImages().at(pair_id01), 1);
242  BOOST_CHECK_EQUAL(
243  correspondence_graph.NumCorrespondencesBetweenImages().at(pair_id02), 1);
244  BOOST_CHECK_EQUAL(
245  correspondence_graph.NumCorrespondencesBetweenImages().at(pair_id12), 2);
246  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(0, 0).size(), 2);
247  BOOST_CHECK_EQUAL(
248  correspondence_graph.FindCorrespondences(0, 0).at(0).image_id, 1);
249  BOOST_CHECK_EQUAL(
250  correspondence_graph.FindCorrespondences(0, 0).at(0).point2D_idx, 0);
251  BOOST_CHECK_EQUAL(
252  correspondence_graph.FindCorrespondences(0, 0).at(1).image_id, 2);
253  BOOST_CHECK_EQUAL(
254  correspondence_graph.FindCorrespondences(0, 0).at(1).point2D_idx, 0);
255  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(1, 0).size(), 2);
256  BOOST_CHECK_EQUAL(
257  correspondence_graph.FindCorrespondences(1, 0).at(0).image_id, 0);
258  BOOST_CHECK_EQUAL(
259  correspondence_graph.FindCorrespondences(1, 0).at(0).point2D_idx, 0);
260  BOOST_CHECK_EQUAL(
261  correspondence_graph.FindCorrespondences(1, 0).at(1).image_id, 2);
262  BOOST_CHECK_EQUAL(
263  correspondence_graph.FindCorrespondences(1, 0).at(1).point2D_idx, 0);
264  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(2, 0).size(), 2);
265  BOOST_CHECK_EQUAL(
266  correspondence_graph.FindCorrespondences(2, 0).at(0).image_id, 0);
267  BOOST_CHECK_EQUAL(
268  correspondence_graph.FindCorrespondences(2, 0).at(0).point2D_idx, 0);
269  BOOST_CHECK_EQUAL(
270  correspondence_graph.FindCorrespondences(2, 0).at(1).image_id, 1);
271  BOOST_CHECK_EQUAL(
272  correspondence_graph.FindCorrespondences(2, 0).at(1).point2D_idx, 0);
273  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(1, 5).size(), 1);
274  BOOST_CHECK_EQUAL(
275  correspondence_graph.FindCorrespondences(1, 5).at(0).image_id, 2);
276  BOOST_CHECK_EQUAL(
277  correspondence_graph.FindCorrespondences(1, 5).at(0).point2D_idx, 5);
278  BOOST_CHECK_EQUAL(correspondence_graph.FindCorrespondences(2, 5).size(), 1);
279  BOOST_CHECK_EQUAL(
280  correspondence_graph.FindCorrespondences(2, 5).at(0).image_id, 1);
281  BOOST_CHECK_EQUAL(
282  correspondence_graph.FindCorrespondences(2, 5).at(0).point2D_idx, 5);
283  for (size_t i = 0; i < 10; ++i) {
284  BOOST_CHECK_EQUAL(
285  correspondence_graph.FindCorrespondences(0, i).size(),
286  correspondence_graph.FindTransitiveCorrespondences(0, i, 1).size());
287  BOOST_CHECK_EQUAL(
288  correspondence_graph.FindCorrespondences(1, i).size(),
289  correspondence_graph.FindTransitiveCorrespondences(1, i, 1).size());
290  BOOST_CHECK_EQUAL(
291  correspondence_graph.FindCorrespondences(2, i).size(),
292  correspondence_graph.FindTransitiveCorrespondences(2, i, 1).size());
293  }
294  BOOST_CHECK_EQUAL(
295  correspondence_graph.FindTransitiveCorrespondences(0, 0, 2).size(), 2);
296  BOOST_CHECK_EQUAL(
297  correspondence_graph.FindTransitiveCorrespondences(1, 0, 2).size(), 2);
298  BOOST_CHECK_EQUAL(
299  correspondence_graph.FindTransitiveCorrespondences(2, 0, 2).size(), 2);
300  BOOST_CHECK_EQUAL(
301  correspondence_graph.FindTransitiveCorrespondences(0, 0, 3).size(), 2);
302  BOOST_CHECK_EQUAL(
303  correspondence_graph.FindTransitiveCorrespondences(1, 0, 3).size(), 2);
304  BOOST_CHECK_EQUAL(
305  correspondence_graph.FindTransitiveCorrespondences(2, 0, 3).size(), 2);
306  correspondence_graph.Finalize();
307  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 1);
308  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 2);
309  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(2), 2);
310  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 2);
311  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 3);
312  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(2), 3);
313  correspondence_graph.AddImage(3, 10);
314  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(0), true);
315  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(1), true);
316  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(2), true);
317  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(3), true);
318  BOOST_CHECK_EQUAL(correspondence_graph.NumImages(), 4);
319  correspondence_graph.Finalize();
320  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(0), true);
321  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(1), true);
322  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(2), true);
323  BOOST_CHECK_EQUAL(correspondence_graph.ExistsImage(3), false);
324  BOOST_CHECK_EQUAL(correspondence_graph.NumImages(), 3);
325  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(0), 1);
326  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(1), 2);
327  BOOST_CHECK_EQUAL(correspondence_graph.NumObservationsForImage(2), 2);
328  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 2);
329  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 3);
330  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(2), 3);
331 }
332 
333 BOOST_AUTO_TEST_CASE(TestOutOfBounds) {
334  CorrespondenceGraph correspondence_graph;
335  correspondence_graph.AddImage(0, 10);
336  correspondence_graph.AddImage(1, 4);
337  FeatureMatches matches(3);
338  matches[0].point2D_idx1 = 9;
339  matches[0].point2D_idx2 = 3;
340  matches[1].point2D_idx1 = 10;
341  matches[1].point2D_idx2 = 3;
342  matches[2].point2D_idx1 = 9;
343  matches[2].point2D_idx2 = 4;
344  correspondence_graph.AddCorrespondences(0, 1, matches);
345  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 1);
346  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 1);
347  const image_pair_t pair_id = Database::ImagePairToPairId(0, 1);
348  BOOST_CHECK_EQUAL(
349  correspondence_graph.NumCorrespondencesBetweenImages().at(pair_id), 1);
350 }
351 
352 BOOST_AUTO_TEST_CASE(TestDuplicate) {
353  CorrespondenceGraph correspondence_graph;
354  correspondence_graph.AddImage(0, 10);
355  correspondence_graph.AddImage(1, 10);
356  FeatureMatches matches(5);
357  matches[0].point2D_idx1 = 0;
358  matches[0].point2D_idx2 = 0;
359  matches[1].point2D_idx1 = 1;
360  matches[1].point2D_idx2 = 1;
361  matches[2].point2D_idx1 = 1;
362  matches[2].point2D_idx2 = 1;
363  matches[3].point2D_idx1 = 3;
364  matches[3].point2D_idx2 = 3;
365  matches[4].point2D_idx1 = 3;
366  matches[4].point2D_idx2 = 4;
367  correspondence_graph.AddCorrespondences(0, 1, matches);
368  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(0), 3);
369  BOOST_CHECK_EQUAL(correspondence_graph.NumCorrespondencesForImage(1), 3);
370  const image_pair_t pair_id = Database::ImagePairToPairId(0, 1);
371  BOOST_CHECK_EQUAL(
372  correspondence_graph.NumCorrespondencesBetweenImages().at(pair_id), 3);
373 }
bool HasCorrespondences(const image_t image_id, const point2D_t point2D_idx) const
bool ExistsImage(const image_t image_id) const
const std::vector< Correspondence > & FindCorrespondences(const image_t image_id, const point2D_t point2D_idx) const
void AddImage(const image_t image_id, const size_t num_points2D)
FeatureMatches FindCorrespondencesBetweenImages(const image_t image_id1, const image_t image_id2) const
std::vector< Correspondence > FindTransitiveCorrespondences(const image_t image_id, const point2D_t point2D_idx, const size_t transitivity) const
point2D_t NumCorrespondencesBetweenImages(const image_t image_id1, const image_t image_id2) const
point2D_t NumCorrespondencesForImage(const image_t image_id) const
bool IsTwoViewObservation(const image_t image_id, const point2D_t point2D_idx) const
void AddCorrespondences(const image_t image_id1, const image_t image_id2, const FeatureMatches &matches)
point2D_t NumObservationsForImage(const image_t image_id) const
static image_pair_t ImagePairToPairId(const image_t image_id1, const image_t image_id2)
Definition: database.h:339
BOOST_AUTO_TEST_CASE(TestDefault)
uint64_t image_pair_t
Definition: types.h:64
std::vector< FeatureMatch > FeatureMatches
Definition: types.h:80