Welcome to the 3DF Zephyr tutorial series.
This tutorial will teach you how to use Ground control points (GCP), constraints, and control distances with 3DF Zephyr.
This tutorial cannot be completed with 3DF Zephyr Free or Lite versions.
Ground Control Points (GCPs) allow you to scale and georeference 3D models in 3DF Zephyr by linking them to distances or GNSS coordinates you have collected onsite.
GCPs can also be used to optimize the camera positions by leveraging the Bundle Adjustment algorithm, thereby reducing the images’ reprojection error. Since that procedure will delete any dense point cloud or mesh, it is highly recommended to check the camera orientation accuracy first and scale your 3D models once the sparse point cloud has been generated and before running other 3D reconstruction phases.
Ground Control points, alignment, and model scaling with known control points (or known distances) can be managed from the panel on the right labeled GCP.
Remember that any reconstruction is up to an arbitrary scale factor, a translation, and a rotation!
The first step tutorial will focus on how to add control points to your 3DF Zephyr project, the second step tutorial will show the scaling process in 3DF Zephyr.
To complete this tutorial, you can either use your dataset or download the sample .zep project you will find below.
![]() | Download Tutorial Dataset – 3DF_Zephyr_A01_Control_Points (1 GB) |
The easiest (yet the less accurate) way to add a control point is by picking it directly from the 3D reconstruction (on a point cloud or a mesh, but not on a textured mesh).
In the GCP Panel, click the “Pick Control Point” (1) Button. Your mouse cursor will turn into a crosshair icon: move the crosshair on the scene (2) and then left-click on the desired position. A new control point will appear in the Control Point List (3).
Of course, you cannot accurately place GCPs by direct picking on a sparse point cloud. You are supposed to use this method if you have previously created at least one dense point cloud.
A more accurate way to add control points is to pick them directly from the photos. You have to place each control point on at least three pictures to use it for the scaling process.
It is advisable to place it on as many pictures as possible if you plan to leverage control points to adjust the camera positions using the Bundle Adjustment optimization.
This method is suitable for dealing with a small/medium number of GCPs or images. For convenience sake, if you work with larger datasets (from about 2000 pictures upwards), you’d better rely on method #3 described below.
From the GCP Panel, click the “From images” (1) button to pick the Control Points. The “Control Point Editor” (2) will appear.
Please note that you can also click a camera in the 3D workspace (3) to select a camera in the camera navigator tab. Right-click on the thumbnail camera (4) for selecting the “add control points from images”(5) option and place the control point of the image you have chosen in the Control point Editor (6).
From the “Camera List” (7) on the left, click a picture to view it in the “Control Point Picker Selector” (8). Left-click where you want the control point to appear, and a red dot (9) will appear. The “Ok” (10) button won’t be clickable yet:
Remember, each control point must be placed on at least three images to be added to the workspace!
The Advanced Tools help you place control points on the pictures:
![]() | Fit in view: resize the image to fit in the view. |
![]() | Rotate 90 degrees clockwise, counter-clockwise, reset rotation: rotate the image and reset the initial position. |
![]() | Show magnifier: show/hide the magnifier on the cursor while placing control points on images. |
![]() | Show reprojection error: show/hide the current control point’s local and global reprojection errors. |
![]() | Show epipolar line: show/hide the epipolar line |
![]() | Show other points: show/hide previously placed control points. |
![]() | Automatic matching on current image: find and place a control point on the current image automatically. |
![]() | Automatic matching on all images: find and place a control point on all the pictures automatically. |
![]() | Detect marker: It automatically detects the center of a rectangular marker placed in the scene. By clicking the “Detect marker” icon and drawing a rectangle upon the center of the marker you want to be found, 3DF Zephyr will automatically place the control point at the center. Note: Using the tool with a check-board style marker will improve the automatic detection. |
![]() | Detect sphere: it allows detecting the center of the spheres placed in the scene. By clicking on the “Detect sphere'” icon and drawing a rectangle over the sphere you want to be found in the image, 3DF Zephyr will automatically place the control point at the center. Note: This feature is expressly designed for the forensics industry, i.e., to support the analysis of the line of fire in crime scenes where a laser scanner scans the spheres on the trajectory rod. |
![]() | Clear point: remove control points placed on the image. |
Click again on another picture from the “Camera List” (7). You will notice an Epipolar line (11) before placing the control point, namely a further hint by Zephyr suggesting the control point you have previously placed is located somewhere in the picture along that line (12).
Remember to find the control points on as many pictures as possible if you plan to optimize the cameras’ orientation using the Bundle Adjustment. The more the images involved, the more accurate the Bundle Adjustment will be. Click the “OK” (10) button to finish adding your new control point.
You can see the Global Reprojection error and the Local Reprojection error values (updated in real-time) while placing control points on the pictures.
Once a control point has been placed on the first image, the Control point editor lists the most reliable cameras, according to Zephyr, by default. Sometimes slanting or too far cameras (from the picked point) are not included if the “Show suggested cameras” option is selected, even though that point is visible on those cameras.
Depending on the onsite data capture (overlap between the pictures, nadiral, oblique capture, or both, etc.), it is advisable to select the “Show reprojected cameras” option to involve every pertinent image once you are done with the “Suggested cameras”. That will be crucial to run the Bundle Adjustment smoothly at a later time.
If you are dealing with huge datasets and/or large numbers of control points, then importing GCPs at once rather than scrolling the whole set of images may be way more time-saving. Clearly, you still need to place control points on the images since what you have imported is not linked to the pictures yet. However, below you will see the benefits coming with this method. To use this tool, please note that both the sparse point cloud you have created and the coordinates you want to import must have the same reference system.
Click the “Import 3D” (1) button in the GCP panel to import 3D coordinates from an external file (.txt, .csv, .dxf).
Select the text file by clicking the “Browse” (2) button and make sure to pick the A01_control_point_tutorial_GPS_coordinates.txt located in the sample dataset linked above. Click the “OK” (4) button to import the 3D coordinates.
3D coordinates will be added to the workspace (red points) and listed in the GCP panel:
You have to link the imported control points to the pictures by right-clicking on each control point name in the GCP panel and selecting the “Edit” option. In other words, by doing this, you are telling 3DF Zephyr the 2D coordinates of every control point.
Once the Control point editor has opened, you will notice that 3DF Zephyr promptly suggests the cameras on which that point is visible. This means you can easily add it, avoiding browsing through the whole dataset.
The 3D reconstruction is up to an arbitrary scale, rotation, and translation in 3DF Zephyr. To scale and georeference using control points, Open the “Align model with 3D constraints” window in the GCP panel once you are done with placing GCPs.
As a rule of thumb:
Whether you have manually added GCPs to the Zephyr project or imported control points from an external file, you will now be able to scale and georeference the project.
Note: the coordinates you are importing and the GCPs you have added to the project must have the same name/label.
Open the “Align model with 3D Constraint” (1) window .
Click the “Import constraints from file (2)” button to browse the external file located in the sample dataset linked above and named A01_control_point_tutorial_GPS_coordinates.txt (3).
You can skip points (2) and (3) if you have followed the above-described method #3.
You will notice that both the “Constraint” and “Check” columns will be enabled for each control point by default.
Note: if you are working with RTK data, these columns will be enabled for each camera position.
Once you have selected your Constraints and Checkpoints (4), you can deal with the input and target reference system (5) settings.
In the “Coordinate Reference System” section; you can set both the input/target reference system and the Geoid Gravity Model.
Click the “Select Projection CS” option to open the Coordinate system database:
The Projection Coordinates System window will open:
Select a Coordinate system from the database list, type its name or EPSG code, or import a new one from an external source by clicking the “Import” button. Click the “Ok” button when you are set.
Last but not least, you can enable/disable the “Perform Bundle Adjustment” (6) option to optimize the camera positions minimizing the reprojection error of the control points you have added to the project. For more details, see the tutorial dedicated to the Bundle Adjustment.
Once you are set, click the “Transform and check errors” (7) button to run the scaling/georeferencing process. An error report will appear when the process is finished, and you can always call it back by clicking on Tools > Control points > Show alignment info.
In 3DF Zephyr can use an alternative method for scaling the project with known distances.
Control distances can be defined as the distance between two control points, the distance between a control point and a camera, or the distance between two cameras.
Click on the “Distance” (1) Button in the Measures tab. The Control point selection window (2) will pop up. From this window, pick the two control points needed from the Control Point #1 selection menu (3) and the Control Point #2 selection menu (4).
This example shows two control points (GCP 6 and GCP 7), but they can also be cameras. Once you click “OK” (5), the distance will be drawn as a green line (6) and rendered onto the screen (in this case, 23.8157).
The control points and distance will also appear in the Control Distance List (7).
To Scale the world using Control distances, simply click on the “Scale World with Control Distances” (8) Button in the Measures panel, and the “Scale with known distances” (9) window will appear.
You can flag the previously created control distance(s) as Constraint and Check (10) as before with the Control points. Activating the flags will set the desired “Distance value” (11) for scaling the points cloud or the mesh. For example, you can set it to 30.000 meters and click the “OK”(12) button.
You’re done! The whole mesh will be scaled on the newly inserted value.
In this tutorial, we learn how to create and use control points and distances to scale and georeference in 3DF Zephyr.
We can use RTK data to scale and georeference our projects through a similar workflow by following the tutorial: A13 – RTK DATA PROCESSING.