Skip to content

Commit 20f9f5e

Browse files
committed
[filterSfM] fix references
1 parent d5e0916 commit 20f9f5e

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

src/software/pipeline/main_filterSfM.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,18 @@ struct LandmarksAdaptator
5656
inline Derived& derived() { return *static_cast<Derived*>(this); }
5757

5858
const std::vector<Landmark> _data;
59+
const std::vector<Landmark*> _data_ptr;
60+
bool usePtr;
5961
LandmarksAdaptator(const std::vector<Landmark>& data)
6062
: _data(data)
6163
{
64+
usePtr = false;
65+
}
66+
67+
LandmarksAdaptator(const std::vector<Landmark*>& data)
68+
: _data_ptr(data)
69+
{
70+
usePtr = true;
6271
}
6372

6473
// Must return the number of data points
@@ -67,7 +76,7 @@ struct LandmarksAdaptator
6776
// Returns the dim'th component of the idx'th point in the class:
6877
inline T kdtree_get_pt(const size_t idx, int dim) const
6978
{
70-
return _data[idx].X(dim);
79+
return usePtr ? _data_ptr[idx]->X(dim) : _data[idx].X(dim);
7180
}
7281

7382
// Optional bounding-box computation: return false to default to a standard bbox computation loop.
@@ -234,7 +243,7 @@ bool filterLandmarks(SfMData& sfmData, double radiusScale, bool useFeatureScale,
234243
filteredLandmarks[newIdx++] = std::make_pair(newIdx, landmarksData[i]);
235244
}
236245
}
237-
sfmData.getLandmarks() = Landmarks(filteredLandmarks.begin(), filteredLandmarks.end());
246+
sfmData.getLandmarks() = std::move(Landmarks(filteredLandmarks.begin(), filteredLandmarks.end()));
238247
ALICEVISION_LOG_INFO("Removing landmarks based on pixel size: done.");
239248

240249
return true;
@@ -299,12 +308,12 @@ bool filterObservations(SfMData& sfmData, int maxNbObservationsPerLandmark)
299308
bool filterObservations2(SfMData& sfmData, int maxNbObservationsPerLandmark, int nbNeighbors = 10, int nbIterations = 5,
300309
double fraction = 0.5)
301310
{
302-
std::vector<Landmark> landmarksData(sfmData.getLandmarks().size());
311+
std::vector<Landmark*> landmarksData(sfmData.getLandmarks().size());
303312
{
304313
size_t i = 0;
305314
for(auto& it : sfmData.getLandmarks())
306315
{
307-
landmarksData[i++] = it.second;
316+
landmarksData[i++] = &it.second;
308317
}
309318
}
310319

@@ -314,7 +323,7 @@ bool filterObservations2(SfMData& sfmData, int maxNbObservationsPerLandmark, int
314323
#pragma omp parallel for
315324
for(auto i = 0; i < landmarksData.size(); i++)
316325
{
317-
const sfmData::Landmark& landmark = landmarksData[i];
326+
const sfmData::Landmark& landmark = *landmarksData[i];
318327

319328
// compute observation scores
320329

@@ -366,7 +375,7 @@ bool filterObservations2(SfMData& sfmData, int maxNbObservationsPerLandmark, int
366375
#pragma omp parallel for
367376
for(auto i = 0; i < landmarksData.size(); i++)
368377
{
369-
const sfmData::Landmark& landmark = landmarksData[i];
378+
const sfmData::Landmark& landmark = *landmarksData[i];
370379
auto& [indices_, weights_] = neighborsData[i];
371380
// a landmark is a neighbor to itself with zero distance
372381
indices_.resize(nbNeighbors + 1);
@@ -449,7 +458,7 @@ bool filterObservations2(SfMData& sfmData, int maxNbObservationsPerLandmark, int
449458
#pragma omp parallel for
450459
for(auto i = 0; i < landmarksData.size(); i++)
451460
{
452-
sfmData::Landmark& landmark = landmarksData[i];
461+
sfmData::Landmark& landmark = *landmarksData[i];
453462
const auto& nbObservations = landmark.observations.size();
454463
auto& [viewIds, viewScores] = viewScoresData[i];
455464

0 commit comments

Comments
 (0)