[SfM] Major bug fix on BlockOrder in BACeres #849
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ceres accepts a ParameterBlockOrdering hint which must assign
every parameter block to exactly one group.
BundleAdjustmentCeres can be called multiple times, and on each
call resetProblem() is called internally to clear the parameter blocks.
However, resetProblem() did not clear the ParameterBlockOrdering.
If the BundleAdjustmentCeres object was used more than once,
Ceres would fail with an error.
In practice, the BundleAdjustmentCeres object is used in a loop that
repeatedly calls adjust() while removing outliers on each iteration.
If the first iteration succeeded with no outliers, the loop would
correctly exit. However, if any outliers are present, the entire
bundle adjustment routine fails leading to the warning:
"Bundle Adjustment failed, the solution is not usable."
This incorrect Ceres usage seems to have been the main cause
of bundle adjustment failures. The error given by Ceres was:
FAILURE (The program has 3855 parameter blocks, but the parameter block
ordering has 7621 parameter blocks.)
Includes fix for rig error functor which was previously unreachable due
to bug. Without fix, rigs cause SfM to crash.
Description
Features list
Implementation remarks