Survey method · GIS development

Reading a tree survey from its photographs

A large survey may generate hundreds of site photographs, and almost every one of them shows several trees at once. On a recent survey for a major redevelopment in Norwich that came to 358 photographs across 1,256 trees and groups. The project scope required a photographic record of all trees, with their survey reference numbers within the filename to allow the project team to identify them during the design phase. This would either involve writing the reference numbers to each file during capture or else manually renaming all the photographs after completion.

Version 1.0 · September 2026

The problem

It is rarely possible on a large non-linear site to collect tree data perfectly sequentially (i.e. T1, T2, T3, etc.) due to access restrictions and the need to work around other site activities. So writing the initial reference number to the photo during capture would embed that non-spatial sequence and force us to use numbering that didn't flow around the site. However, having reference number sequences that are spatially ordered is very useful, because it aids location and allows users to navigate to find a particular tree more easily (e.g, if you are looking for T451, you should be more likely to find it near trees T425 - T475 rather than trees T100 - T150). We use a custom tool to automate the renumbering process by projecting each tree onto a user defined path, and then sampling its position along that path (or proximity to it) to determine its place in the sequence - so the tree closest to the start of the path becomes T1, the next becomes T2, and so on. This ensures a logical and spatially ordered sequence within all our survey ouputs no matter how many trees are surveyed.

However, re-labelling photographs by hand is slow, and invites inevitable and variable human error. 10-20 photographs can be done by eye and checked fairly easily, but the work involved in re-labelling and checking more than 40-50 is exponentially harder and quickly becomes unmanageable.

The solution is that the information needed to automate the process is already present: every photograph carries the position it was taken from and the direction the camera was pointing, the field of view of the camera is a known quantity, the terrain of the site is freely available via LiDAR, and the survey already holds the canopy of every tree as a drawn shape, with its height. What was missing was a way to bring these together, so we built a tool that works out which surveyed trees are actually visible in each photograph, using the position and compass bearing recorded by the camera, the field of view of the camera, the canopy shapes already drawn in the survey, and the terrain of the site itself.

What this is not: it is not image recognition. Nothing in the method looks at the content of the picture. It is a geometry question answered from survey data, which means the result can be checked against the drawing rather than trusted on faith.

One: what the lens could see

A camera at a known position, pointing on a known bearing, with a known angle of view, can only have captured what fell inside a wedge of ground in front of it. Every canopy the wedge touches is a candidate for that photograph.

Drag the camera, swing the bearing, and watch the candidate list change.

Interactive

Candidate selection

Drag the blue camera marker, or the handle on the end of its bearing line.

Trees in frame0
References, nearest first None

The real tool widens this wedge by a small tolerance, to absorb the ordinary scatter in a phone compass reading. The angle of view shown by default, 67.8°, is the measured horizontal figure for the survey camera in landscape.

Two: why a taller tree can be the hidden one

Knowing a tree fell inside the frame is not the same as knowing it can be seen. The obvious rule, that a taller tree shows over a shorter one, is wrong often enough to matter. What decides the question is the angle a crown occupies from where the photographer stood, and that depends on distance and on ground level as much as on height.

Below, a nearer 8 m tree stands between the camera and a 16 m tree well behind it. On level ground the taller tree shows comfortably over the top, as you would expect. Drop it a couple of metres into a hollow and it disappears entirely, while remaining twice the height of the tree hiding it.

Interactive

Apparent height, not measured height

A section through the ground, seen from the side. The dashed line is the sightline that just grazes the top of the nearer crown.

Near crown, apparent angle
Far crown, apparent angle
Far crown showing0%
Visible

A crown counts as visible once a worthwhile part of it clears the obstruction. Anything clearing only marginally is kept, but flagged for a person to confirm, rather than being silently included or silently dropped.

Three: terrain obstruction

On level sites the trees are the only obstruction worth modelling. On sites with real relief they are not. A tree can sit in full view of the camera with nothing in front of it and still be invisible, because the land rises in between.

We step along the line of sight at fixed intervals, reading the ground height at each step from a terrain model, and keep the steepest angle the ground reaches. Anything sitting below that angle is behind the hill. Raise the ridge and watch the crown go.

Interactive

Stepping along the sightline

Each tick is one sample of the ground. The dashed line is the steepest angle the ground reaches, which is the horizon for this view.

Ground horizon
Crown top
Crown showing0%
Visible

Widen the sample spacing and the ridge is eventually stepped over entirely, and the tree wrongly reappears. This is why the spacing is tied to the resolution of the terrain model rather than chosen for speed.

What comes out

Each photograph is copied, renamed for the trees it shows, and marked with a small label in the corner. The original files are never altered.

G12, T77, T78, T79, H14

The corner label, positioned to clear the survey camera's own stamp.

Renamed fileG12-T77-T78-T79-H14_(24-07-26).jpg
TaggedEvery photograph showing at least one visible tree.
SkippedPhotographs with nothing visible, copied through unchanged so that nothing disappears quietly.
ScheduleEvery tree listed once, with each photograph it appears in, nearest first, as a linked reference.

The schedule is the useful artefact. Given a tree reference, it answers which photographs show that tree, in order of how close the photographer was standing.

What this is not: it is not a substitute for looking. The method cannot know that a crown was bare in January, or that a gap in a hedge let a view through. Every judgement it makes is recorded with its reasoning, and anything marginal is marked for a person to confirm. It sorts the work; it does not sign it off.

Why build it this way

Carrow Works was the first site the method was run on at full scale. It leans entirely on survey data that already exists: the canopy shapes drawn during the survey, the heights recorded against them, and the position and bearing written by the camera. Nothing is estimated that could be measured, and nothing is measured twice.

That has a practical consequence. Because the working is geometry rather than interpretation, every result can be put back on the plan and checked. The wedge for any photograph can be drawn, the trees it caught can be highlighted, and the reason any tree was set aside can be read off directly.

Document control

Version

Written and maintained by Tony Sorensen BSc (Hons) Arb, MICFor, MArborA.

Version 1.0 · September 2026 · first publication

Survey work that leaves a trail

We develop our own survey tools so that the evidence behind a recommendation can be examined, not just asserted. If you have a site where that matters, we would be glad to talk.