@@ -43,7 +43,7 @@ using namespace aliceVision::sfmDataIO;
4343namespace po = boost::program_options;
4444namespace 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
4848struct 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