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 adjust 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 allows to run 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 element 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.

  • Running the “Workspace -> Optimize Camera Parameters” menu option

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.

  • Running the “Scale model with control points” option

Similarly, you can run an additional bundle adjustment when scaling the model with control points. Having additional 3D information will help Zephyr to drive the reconstruction towards the correct solution.

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 constrains only in proximity of them, registering high deviation in all the automatically generated points.

A 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 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.