Tutorial #A10 : Bundle adjustment tutorial

Understanding bundle adjustment


Welcome to the 3DF Zephyr tutorial series.
In this recipe, you’ll learn what bundle adjustment is and how/when to use it.
Launching an additional bundle adjustment is available only in 3DF Zephyr Pro and 3DF Zephyr Aerial since it’s required to place control points, either in the images (2D constraints) or as 3D information (from example from ground control points)


  • What is bundle adjustment?

The bundle adjustment is a non linear minimization procedure that adjusts points and cameras by minimizing the reprojection error of points. It’s performed at the end of each merge and a final bundle adjustment with all points and cameras is always performed at the end of the structure from motion procedure.
3DF Zephyr Pro and Aerial versions allow running additional bundle adjustment steps manually by feeding 2D or 3D constraints.
Since the bundle adjustment works on the camera internal and external parameters, keep in mind that only the sparse point cloud will be affected by the bundle adjustment. Any existing elements such as dense clouds or meshes that are already in the workspace will not be changed at all. It is strongly advised to run the bundle adjustment after the sparse point cloud until the camera orientation looks right, before moving to the dense point cloud generation.
Zephyr offers an easy to use slider to control the bundle adjustment process, in which you can define the confidence in the constraints. It’s worth noticing that the more confidence you put into the manual constraint, the less confidence will be made by Zephyr in its automatically generated points.

  • Optimize Camera Parameters

This option only uses the 2D control points as constraints for the bundle adjustment. This is weaker than using 3D constraints, however, if you lack and 3D information (such as ground control points) this is your only option.
In the “Tools” menu (1) select “Workspace” (2) and then “Optimize cameras parameters” (3)
The “Perform Bundle Adjustment” (4) window will appear.
Zephyr allows you to choose “Constraint Confidence Weight” (5) and when you are happy, click “Ok” (6).

  • Scale model with control points

Having additional 3D information will help Zephyr to drive the reconstruction towards the correct solution. You can run an additional bundle adjustment when scaling the model with control points. Just click on “Align model with 3D constraints” (7).
The “Align with control Points and Camera positions” (8) window will appear and allows you to choose Constraints and control points. When you are ready, click “Ok” (9).
The minimum number of control points set as constraints to run the bundle adjustment is 3, however, a higher number is advised, especially when accuracy is important.
You should only increase the bundle adjustment slider value as you increase the number of control points defined in the workspace accordingly, otherwise, the final geometry will be near the defined constraints only in the proximity of them, registering high deviation in all the automatically generated points.
Typical usage is when the reconstruction shows an unexpected “rounded” effect due to drifting after the sparse point cloud has been generated, you should try running this type of additional bundle adjustment. If the employed camera/s has/have a very high radial distortion (i.e. fisheye lenses) make sure that “adjust radial distortion” is enabled.
When doing this, again, make sure to use a congruous amount of control points. It’s also suggested that you use some control points as constraints, as well as some control points only as a control so that you have a way to verify that the solution has been improved (the residual value should obviously get lower).
Setting the confidence of the constraints to 99% (or similar) is generally a bad idea.