What is the 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 (except for 3DF Zephyr Lite and 3DF Zephyr Free) allows running of 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 any 3D information (such as ground control points) this is your only option.


  • Running the “Align model with 3D Constraints” 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 closer to the defined constraints only in proximity of the aforementioned constraint points, thus 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 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.