Skip to main content
Version: 3.4.20 (unreleased)

SfM: Control, Scale and Reference Elevation

Requires the SfM licence feature

The photogrammetry workflow appears only when your licence includes the SFM feature. See Why Is This Greyed Out?.

A model placed by consumer GPS is usually metres out. This page covers the three ways to do better, from most to least accurate: ground control points you surveyed, scale bars of known length, and fitting the model to reference elevation such as a national lidar DTM. Running the reconstruction itself is in the SfM user guide.

Ground control points​

Ground control points (GCPs) are physical targets whose coordinates you surveyed. Marking them in the photographs lets VRGS fit the model to your survey instead of to consumer GPS — centimetres instead of metres — and, just as importantly, lets you measure how accurate the result actually is.

1. Import the survey​

Right-click the workflow → Georeference → Import Ground Control Points (CSV)….

The importer is deliberately tolerant of what survey instruments actually export: byte-order marks, Windows or Unix line endings, quoted fields, comment lines, comma or semicolon or tab or space delimiters (auto-detected), and decimal commas (547871,5). Pick the file and it will guess your column mapping from the header; confirm or correct it, and check the preview grid before importing.

Two things it will not do quietly:

  • Ambiguous numbers are refused, not guessed. 1.234,5 could be 1234.5 or 1.234, so it fails loudly rather than silently importing a wrong coordinate.
  • Every dropped row is reported, with the line number as it appears in your file, in the messages panel.

Coordinates are in — either the project's own coordinate system (the usual case: your surveyor delivered grid coordinates) or WGS84 longitude/latitude, which VRGS reprojects on import. Everything is stored in the project CRS, so mixed frames never reach the solver.

Imported points appear immediately in the 3D view and under Ground Control Points in the Data Tree — before you spend an hour marking them. This is the fastest way to catch a wrong CRS or a swapped easting/northing: if the control lands in the wrong county, stop now.

2. Mark them in the photographs​

Open the Photo Browser, right-click → Mark Ground Control Point and choose a point from the list (it shows how many photos each one is marked in). Click the target in the image. Click again to correct the position; Shift+click removes a mark; Escape or Stop Marking Ground Control leaves the mode.

GCP marks are drawn as magenta boxed crosses, deliberately unlike the tie-point circles — a tie point says "these clicks are the same thing", a GCP says "this click is that surveyed coordinate".

Once the model is georeferenced, VRGS shows you where to look. In a solved photo, each control point not marked there yet is drawn where it should fall: a cyan circle with a centre dot, yellow for the point you are marking. The Mark Ground Control Point list adds how many photos each point should appear in, and Next Photo for This Point (N) opens the next of those that is not marked yet. The marks are still yours to place: the circle is a prediction from the current solve, not a measurement.

The workflow's Control points row in the SFM tree lists each point's progress: how many photos it is marked in, (needs 2) when a control point has fewer, and how many more it should appear in.

Each point needs two photos

A control point cannot be located in 3D until it is marked in at least two registered photographs. Three or more marked points are needed before they can drive the georeferencing.

3. Re-run​

With 3+ usable control points, GCPs take over the georeferencing from GPS, which drops back to a soft constraint on cameras far from any control. The log says which drove the fit — it never happens silently.

Control points vs check points​

Turn Use as control off on a point (in its properties) to make it a check point: it is measured but never fitted.

This matters more than it sounds. A control point's residual only tells you how well the fit absorbed it — fit enough points and you can drive that number to almost zero while the model is still wrong elsewhere. A check point is held back from the fit, so its residual is the only honest estimate of the model's real accuracy. The quality report RMSs the two separately and tells you when you have no check points at all.

Spread your control

Control pegged out along a single line — down one road or one bench — cannot fix rotation about that line. VRGS refuses such a fit rather than emit a model rolled by whatever the noise favoured, and says so in the log. Spread the points across the site, and in height where you can.

Using control elsewhere in the project​

Ground control points are ordinary project objects, not an SfM-only feature:

  • Use Project Ground Control Points adopts control that already exists in the project (surveyed for something else, or imported before this workflow existed) into the workflow.
  • Seed Mesh Tie Points from Ground Control turns measured control into the mesh's own tie points, so the mesh ribbon's Corrections → GCP can pull an existing mesh onto the survey. Most useful when a model was GPS-aligned and the GCPs were check points: the residuals are real, and this is the one-click way to consume them.

Scale bars​

A photograph set can never recover its own scale: a model of a quarry and a model of a sandpit look identical to the solver. GPS and ground control both give scale as a side effect of giving position. When you have neither — hand-held photos of an outcrop with no GPS and no survey — a single measured distance is enough.

Right-click the workflow → Georeference → Scale Bars (Known Distances)…. Pick the two tie points at either end of something you measured (a ranging rod, a tape, a known feature), type the distance in metres, and Add. Re-run the reconstruction.

Both ends must be tie points linked across at least two photographs, so mark them first in the Photo Browser (Ctrl+click a point to start a link, then click the same feature in another photo). Only links that qualify are offered.

Scale is not georeferencing

A scale bar gives the model real size. It does not give it a position or an orientation on the Earth. A scale-bar-only model is metric — you can measure distances on it — but it is not georeferenced and must not be measured against other project data. The quality report says this explicitly.

If GPS or ground control already scaled the model, scale bars are not applied — re-scaling would pull the model off the coordinates that placed it. They are still measured, which makes them a free independent check of the GPS/GCP scale.

Several bars are combined by the median, so one mistyped distance (a 1 m rod entered as 10) cannot drag the whole model's scale.


Aligning a model to reference elevation​

A model placed by the drone's GPS is usually metres out: tens of metres in height (the GPS height is on a different datum from national mapping), a metre or two in plan, a fraction of a degree in rotation, and often 0.5–2 % in scale. If regional elevation data covers the site — for example the Environment Agency's 1 m lidar DTM in England — you can fit the model to it once the dense cloud is built, and carry on meshing and texturing in the corrected position.

  1. Build the dense cloud (Run Reconstruction with Build up to at Dense cloud, so you can align before meshing). The model must be georeferenced (GPS or ground control) and the dense cloud loaded.
  2. Right-click the workflow and choose Georeference → Align to Reference Elevation…. A menu lists:
    • every mesh and point cloud already in the project that can serve as the reference (a DEM you imported, a lidar cloud, another model), and
    • Download … for this model, then align for the elevation sources that cover the site, finest first. The download covers the model plus 100 m on every side, and is added to the project as a mesh.
  3. Pick one. The fit runs in the background and reports in the messages panel: how far the model moved (east, north, up), the rotation, the scale, and the distance from the model to the reference before and after (16th, 50th and 84th percentiles).

What moves. Everything the workflow made, together: the sparse, dense and camera clouds, every mesh, the solved camera positions (and the camera markers published on its meshes), and the region of interest. The SFM tree shows Aligned to reference under the workflow's Outputs, with the scale and the residual spread.

It stays aligned. The alignment is saved with the workflow and applied whenever the reconstruction's results are written into the project. Re-run the dense stage, change a setting and re-run, or make a new mesh: everything lands in the reference's frame, not back at the GPS position.

Choices on the menu.

  • Also Correct Scale (on by default) lets the fit change the model's size as well as its position. Turn it off for a rigid fit, for example when the model is scaled by ground control or scale bars you trust.
  • Reset Reference Alignment moves everything back to where the solve put it.

How the fit works. The model is first moved vertically by the median height difference to the reference, which takes out the datum offset. Then a coarse fit (ICP within about 10 m) and a fine fit (within three DEM cells) follow. On a DEM, steep facets are left out: a 2.5D grid draws a cliff as a slope that is not there, and fitting a cliff face to it would tilt the model. Vegetation and other points that do not match are down-weighted rather than trusted.

When nothing moves

The alignment refuses, and says why, when the model is not georeferenced (it is too far from any reference for ICP to start: georeference it first), when the dense cloud and the reference do not overlap, or when the fit would need more than a 5 % change of scale (the wrong reference, or one in other units). A cloud or mesh of the workflow that is not loaded must be loaded first, or it would be left behind in the old position.

Filling gaps from the reference when meshing. When a workflow is aligned to a DEM that is still loaded, Create Mesh (Poisson)… offers Fill gaps and pad the edge with 'reference', with a Pad distance (20 m by default). DEM points are added to the mesh input wherever the cloud is too thin to mesh: a DEM node is filled when fewer points lie within one DEM cell of it in plan than 15 % of what such a disc holds where the cloud is whole. That takes in gaps the photos did not cover, a margin round the edge, and patches of scattered points such as vegetation, where the density trim would otherwise leave a hole, so the mesh is closed with real terrain instead of a bubble or a hole. The one-cell band between the model and the fill, and holes too narrow to take any fill, are bridged by the surface reconstruction and kept through the density trim. Right beside the model nothing is added, so a cliff face keeps the photogrammetry's shape and never picks up the DEM's interpolated slope. The filled vertices are marked 1 in the mesh's Reference Fill attribute and take the model's average colour; colour the mesh by that attribute to see them.