Primary forest vs. secondary forest: how to tell them apart in satellite imagery

Mist rising over a dense tropical forest canopy on a hillside.

A clearing alert on an old-growth block and a clearing alert on a ten-year-old regrowth patch mean different things to an analyst screening a supply shed for risk. Same pixel signature, loss of canopy, but the stakes behind it depend on what was standing there before. Before you can triage a flag, you need to know what kind of forest you're looking at: primary or secondary. Here's what actually separates them on screen, and where the distinction gets genuinely hard.

Canopy texture is the first tell, not the color

Primary forest in a cloud-free optical scene reads as uneven. Crown sizes vary block to block, gaps from old treefalls show up as small dark pockets, and the canopy surface has a rough, almost cauliflower texture when you zoom past 10m resolution. Secondary forest, especially regrowth under 20 years old, tends toward a smoother, uniform canopy. Crowns are closer in size because the stand regenerated at roughly the same time, so the texture reads flatter, almost like a lawn compared to the primary block's broken surface.

Color alone will mislead you. A healthy secondary stand in wet season can look just as green and just as dense as an old-growth neighbor. Texture holds up better across seasons than color does, which is why most analysts trained on this screen for crown-shape variance first and greenness second.

Canopy height models, where you have access to lidar or stereo-derived DSM data, settle the texture question faster than optical alone. Primary canopy in a tropical block commonly pushes well past 35m, with emergent trees breaking even higher. A secondary stand regrowing after a 2005 clearing event is still going to sit in the 15-25m band in most cases, and that gap shows up clean in a height raster even when the optical texture is ambiguous.

Use the intact forest landscape boundary as your starting filter

Before you eyeball texture at all, pull whatever intact forest landscape boundary your jurisdiction or supply shed maps against. IFL layers set the boundary around forest blocks large enough and undisturbed enough to show no visible sign of human fragmentation from space, usually a minimum area threshold with a buffer from roads and clearings. Anything inside that boundary that still has canopy is almost certainly primary. Anything outside it could be either, and that's where the texture and height checks earn their keep.

The boundary isn't a perfect proxy. A block can sit outside the IFL polygon and still be genuinely old-growth, just fragmented enough by a nearby road to fail the size threshold. And selective logging inside an IFL can leave a canopy that's technically primary but structurally degraded. Treat the boundary as a sorting step that narrows where you need to look closely, not a verdict.

Forest age class as a screening habit

The honest version of this work is that no single image answers "primary or secondary" with certainty. What works is building forest age class into your regular screening pass: check the IFL boundary, read canopy texture and height where you have it, and cross-reference against the earliest available imagery for that tile. If a block shows bare ground or active clearing anywhere in the archive going back to the 1980s or 1990s Landsat record, you're looking at secondary forest no matter how closed the canopy reads today. If the archive shows continuous closed canopy as far back as it goes, treat it as primary until field verification says otherwise.

This is also where the distinction stops being academic for a sourcing or enforcement team. A clearing alert inside confirmed primary forest is a different conversation than one in a secondary stand that was already slated for conversion. A weekly clearing feed built around your own draw area routes both kinds of flags to your team the week they happen, so the age-class check happens before the decision, not after a satellite pass you missed three months ago.

Get a clearing alert the week it happens instead of finding out at the next land-cover update.

Start a project

← Back to the blog