Skip to content

Commit f8e4d42

Browse files
committed
[filterSfM] fix bug
1 parent 10c8463 commit f8e4d42

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/software/pipeline/main_filterSfM.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ using namespace aliceVision::sfmDataIO;
4343
namespace po = boost::program_options;
4444
namespace fs = boost::filesystem;
4545

46-
static const std::size_t MAX_LEAF_ELEMENTS = 10;
46+
static const std::size_t MAX_LEAF_ELEMENTS = 64;
4747

4848
struct LandmarksAdaptator
4949
{
@@ -156,7 +156,7 @@ bool filterLandmarks(SfMData& sfmData, double radiusScale)
156156

157157
ALICEVISION_LOG_INFO("Build nanoflann KdTree index.");
158158
LandmarksAdaptator data(sfmData.getLandmarks());
159-
KdTree tree(3, data, nanoflann::KDTreeSingleIndexAdaptorParams(10));
159+
KdTree tree(3, data, nanoflann::KDTreeSingleIndexAdaptorParams(MAX_LEAF_ELEMENTS));
160160
tree.buildIndex();
161161
ALICEVISION_LOG_INFO("KdTree created for " << sfmData.getLandmarks().size() << " points.");
162162
std::vector<IndexT> newIdx(sfmData.getLandmarks().size());
@@ -168,7 +168,7 @@ bool filterLandmarks(SfMData& sfmData, double radiusScale)
168168
{
169169
PixSizeSearch search(landmarksPixSize[i] * radiusScale, landmarksPixSize, i);
170170
bool found = tree.findNeighbors(search, sfmData.getLandmarks().at(i).X.data(), nanoflann::SearchParams());
171-
if (!found)
171+
if (found)
172172
{
173173
newIdx[i] = -1;
174174
}
@@ -177,19 +177,26 @@ bool filterLandmarks(SfMData& sfmData, double radiusScale)
177177
newIdx[i] = currentIdx++;
178178
}
179179
}
180+
181+
ALICEVISION_LOG_INFO(
182+
"Identified " << (sfmData.getLandmarks().size() - currentIdx) <<
183+
" landmarks to remove out of " << (sfmData.getLandmarks().size()) <<
184+
", i.e. " << ((sfmData.getLandmarks().size() - currentIdx) * 100.f / sfmData.getLandmarks().size()) <<
185+
" % "
186+
);
180187
ALICEVISION_LOG_INFO("Identifying landmarks to remove: done.");
181188

182189
ALICEVISION_LOG_INFO("Removing landmarks: started.");
183-
Landmarks filteredLandmarks;
190+
std::vector<std::pair<IndexT, Landmark>> filteredLandmarks(currentIdx);
184191
#pragma omp parallel for
185192
for (auto i = 0; i < sfmData.getLandmarks().size(); i++)
186193
{
187194
if(newIdx[i] != -1)
188195
{
189-
filteredLandmarks[newIdx[i]] = sfmData.getLandmarks().at(i);
196+
filteredLandmarks[newIdx[i]] = std::make_pair(newIdx[i], sfmData.getLandmarks().at(i));
190197
}
191198
}
192-
sfmData.getLandmarks() = filteredLandmarks;
199+
sfmData.getLandmarks() = Landmarks(filteredLandmarks.begin(), filteredLandmarks.end());
193200
ALICEVISION_LOG_INFO("Removing landmarks: done.");
194201

195202
//// take only best observations

0 commit comments

Comments
 (0)