diff --git a/src/aliceVision/sfm/pipeline/sequential/ReconstructionEngine_sequentialSfM.cpp b/src/aliceVision/sfm/pipeline/sequential/ReconstructionEngine_sequentialSfM.cpp index 0b4324fa61..aa9916f6a9 100644 --- a/src/aliceVision/sfm/pipeline/sequential/ReconstructionEngine_sequentialSfM.cpp +++ b/src/aliceVision/sfm/pipeline/sequential/ReconstructionEngine_sequentialSfM.cpp @@ -227,7 +227,16 @@ bool ReconstructionEngine_sequentialSfM::process() exportStatistics(elapsedTime); - return !_sfmData.getPoses().empty(); + const size_t nbviews = _sfmData.getViews().size(); + const size_t nbposes = _sfmData.getPoses().size(); + + size_t minPoses = 1; + if (nbviews > _params.smallDatasetLimit) + { + minPoses = 3; + } + + return (nbposes >= minPoses); } void ReconstructionEngine_sequentialSfM::initializePyramidScoring() diff --git a/src/aliceVision/sfm/pipeline/sequential/ReconstructionEngine_sequentialSfM.hpp b/src/aliceVision/sfm/pipeline/sequential/ReconstructionEngine_sequentialSfM.hpp index 9825380ba3..2c5478e7f2 100644 --- a/src/aliceVision/sfm/pipeline/sequential/ReconstructionEngine_sequentialSfM.hpp +++ b/src/aliceVision/sfm/pipeline/sequential/ReconstructionEngine_sequentialSfM.hpp @@ -47,6 +47,9 @@ class ReconstructionEngine_sequentialSfM : public ReconstructionEngine bool useLocalBundleAdjustment = false; int localBundelAdjustementGraphDistanceLimit = 1; + //Number of views under which a dataset is considered small + size_t smallDatasetLimit = 5; + /// Dump current status of the scene every 3 resections bool logIntermediateSteps = false;