sitediaSITE ANALYSIS DIAGRAMS

Finding Trees in Aerial Imagery — How the TREES Panel Works

2026-09-05 · sitedia guideThis page was written by AI.

Green space in a site analysis usually stops at the GREEN SPACES panel: parks and open-space polygons from a land-use layer. That is land use, not trees. The polygon does not say whether the park is lawn or woodland, and street trees and courtyard trees outside any polygon do not exist in it. If you want to distinguish a street with a canopy from one without, you have to find the trees themselves.

Tree canopy diagram, Upper East Side, 1,000 ft radius — street trees along the avenues
Upper East Side, 1,000 ft radius. Street trees line the avenues; backyard trees run through the block interiors.

The TREES panel detects trees directly in aerial imagery. This is an explanation of how, where it failed along the way, how it was checked in each of the twelve cities before being switched on, and what "86% recall" does and does not mean.

Trees show up in light you cannot see

Leaves absorb red light for photosynthesis and reflect near-infrared, which is useless to them, almost completely. In a near-infrared photograph trees burn white while asphalt and roofs stay dark. The ratio that measures that contrast is NDVI, the normalised difference vegetation index — a standard tool in remote sensing.

Aerial imagery panel, Upper East Side, 1,000 ft radius
The raw material: NAIP imagery. What you cannot see here is the near-infrared band the detection uses.

The US is lucky here. NAIP imagery (the National Agriculture Imagery Program) carries four bands including near-infrared at roughly 2–3 ft per pixel. The Korean edition has only RGB aerials and must find trees by color, which is much weaker — its recall is 70% against 86% here, and the whole gap is the missing band.

Raw NDVI does not work — the offset

The first attempt looked plausible and was wrong. Over Times Square, where there should be almost nothing green, the minimum near-infrared value was 94 (red's was 26). Shadows that should read near black had a floor of 94 baked in. That lifts NDVI everywhere, and with a threshold of 0.30 16% of Midtown's roofs and walls came out as canopy — magenta over the rooftops when we overlaid the result. Raise the threshold to suppress that and you lose half the street trees in shadow (recall 51%).

The fix is to subtract the lift. The trap is estimating the lift from the scene itself:

Opposite symptoms, same failure: a scene with no dark ground to calibrate against.

Mask water and buildings first, then measure

We stopped trying to recognize water spectrally (turbidity and glare flip its values within a single river) and masked it geometrically with the water polygons we already have. Building footprints are masked the same way, which alone halved the Midtown false positives. The offset is then estimated only from the dark, non-vegetated ground that remains.

Measured that way, the offset comes out at (41,67), (44,73), (43,63), (41,64) across four unrelated neighborhoods — nearly constant. That is what a real sensor property should look like, as opposed to a scene property, and it is what we had been looking for.

Checked against the census — 86% recall in New York

New York publishes the 2015 Street Tree Census with a coordinate for every street tree. We took the census points in seven neighborhoods and asked whether our canopy mask covers each one (within 10 ft).

Upper East SideEast VillageForest HillsBay RidgeRiverdaleAstoriaHarlemTotal
82%80%84%88%92%93%88%86% (2,998 of 3,497)

The other side is clean too: Times Square 1.6%, Hudson River 0.0%, East River 1.5% canopy; Central Park 73%, Prospect Park 83%, Staten Island Greenbelt 99%.

Los Angeles — 84.5%

Los Angeles publishes its street tree inventory (StreetsLA, Urban Forestry Division, on the city's GeoHub). We ran the same check — inventory points within 10 ft of the canopy mask — in eight neighborhoods, leaving out records that are only an empty tree well.

DowntownKoreatownWestwoodHollywoodHighland ParkSilver LakeVeniceSherman OaksTotal
69%74%73%84%89%93%93%93%84.5% (1,880 of 2,224)

Recall is lowest in the dense districts — Downtown, Koreatown and Westwood Village. The inventory was last updated in 2020, so some of its trees may no longer be there, which makes these figures a lower bound. The other side: the ocean off Venice reads 0.0% canopy, the Port of Los Angeles 3.0%, the Arts District 3.1%, Griffith Park 45.5%. The sensor offset in the Los Angeles imagery differs from New York's, but because it is measured on the land in every scene, the same threshold held.

The census is used for validation only. Every tree you see on the panel was found in the imagery.

San Francisco — 89.2%

San Francisco publishes its street tree inventory (DataSF, San Francisco Public Works, public domain). Checked the same way (±3 m) in eight neighborhoods, 3,697 of 4,144 street trees fall on detected canopy.

Pacific HeightsNoe ValleyMissionSunsetBernal HeightsRichmondHayes ValleySoMaAll
95.1%93.4%92.6%92.6%88.5%86.0%85.5%82.5%89.2% (3,697 of 4,144)

The other side: the ocean off Ocean Beach reads 0.0% canopy, Pier 70 0.8%, Golden Gate Park 75.2%. Turning the canopy image upside down drops the match to 39–70%, which shows the trees and the imagery line up.

Boston — 86.4%

Boston publishes its tree inventory (BPRD Trees on Analyze Boston, Boston Parks and Recreation Department, public domain). Leaving out empty sites and stumps and checking the same way (±3 m) in eight neighborhoods, 2,109 of 2,440 street trees fall on detected canopy.

Back BaySouth EndBeacon HillDorchesterCharlestownJamaica PlainEast BostonRoslindaleAll
92.7%89.2%87.7%86.2%86.2%77.6%75.9%73.0%86.4% (2,109 of 2,440)

The other side: Boston Harbor reads 0.0% canopy, the Seaport's marine industrial park 3.6%, Franklin Park 45.6%. Turning the canopy image upside down drops the match to 41–66% in seven of the eight neighborhoods. Jamaica Plain is the exception at 75.5% — only 49 trees were sampled there under a wide canopy, so that one figure says less.

Houston — 91.0%

Houston publishes its street tree inventory (City of Houston Urban Forestry); we use it only for this check. Keeping trees marked present and leaving out dead ones, and checking the same way (±3 m) in eight neighborhoods, 4,931 of 5,416 trees fall on detected canopy.

MeyerlandThird WardThe HeightsMontroseMuseum DistrictMidtownUptownDowntownAll
99.5%97.1%96.5%91.3%91.3%87.3%84.5%73.5%91.0% (4,931 of 5,416)

Turning the canopy image upside down drops the match to 30–80%; in the leafiest neighborhoods the gap is narrow, so those figures say less. Because recall cannot catch a detector that paints too much, we also laid the Downtown detection over the aerial photo: the towers' shadows are not painted as trees. Against the Houston Advanced Research Center's 2024 lidar canopy (vegetation taller than 3 m, available for the Third Ward), our canopy share comes out higher, 36.9% against 25.1%, because the panel also picks up lower vegetation.

Denver — 2.5 points

Denver publishes its 2020 tree canopy by neighborhood and a tree inventory (City of Denver Open Data Catalog, CC BY 3.0). With the settings used in the other cities our canopy came out about 6 points high: Denver's residential neighborhoods have many small, bright lawns that the lawn filter, set on New York's large lawns, let through. Denver therefore uses a stricter lawn filter, sized in meters so that it reads the same at every site radius. Measured on 13 neighborhoods that were not used to set it, the panel comes out 0.8 points high on average and 2.5 points off in absolute terms; Congress Park is the furthest, 6.3 points low. Against the City's tree inventory (living trees, ±3 m) 8,626 of 9,322 trees in eight neighborhoods fall on detected canopy, 92.5% — Downtown 69.1% to Congress Park 97.8%. Turned upside down the match drops to 14–85%, so in the leafiest neighborhoods the recall says less than the canopy comparison.

Seattle — 2.7 points

Seattle publishes its 2021 tree canopy by census tract and a street tree inventory (Seattle Open Data). With the settings used in the other cities our canopy came out about 12 points high across 57 tracts: Seattle's lawns, playfields and golf courses are green in the aerial photo and passed the lawn filter. Seattle therefore uses its own lawn filter, sized in meters like Denver's. The 57 tracts that fit inside a ½-mile window were split in two; the filter was set on one half, and on the other 28 tracts the panel comes out 1.1 points high on average and 2.7 points off in absolute terms (53 of all 57 within 5 points, the furthest 6.5 points high). Against the City's street trees with a trunk of 6 inches or more (±3 m), 96.3% fall on detected canopy. Downtown and South Lake Union still read about 5 points high.

Minneapolis — 3.0 points

Minneapolis's street tree inventory dates from 2012, before the City removed tens of thousands of ash trees, and its published canopy by neighborhood carries no survey year. We therefore compared against the Metropolitan Council's Growing Shade 2021 canopy for the City's eleven communities, made from 10 m Sentinel-2 imagery and calibrated to the University of Minnesota's 1 m land cover. Covering each community with ½-mile windows, our canopy comes out 2.7 points high on average and 3.0 points off in absolute terms, with the default settings (the Denver and Seattle lawn filters read 7–8 points low here). The densest communities read highest: Powderhorn 7.3, Downtown (Central) 6.4 and Phillips 6.3 points high. Because the reference is a 10 m product, this is a coarser check than a tree inventory.

Washington, DC — the District's measured canopy

In DC the trees panel does not use our detection. DC's street tree inventory gave a high recall (94–100% in eight neighborhoods), but recall cannot catch a detector that paints too much, so we also compared against the District's 2020 land cover, pixel by pixel. Downtown and around Dupont Circle about seven in ten pixels we called trees were buildings, roads or paving in the official map — the long shadows of tall buildings in DC's aerial photo read as vegetation. Dimming dark pixels only lowered the total; it did not put the trees in the right places. DC publishes its Urban Tree Canopy 2020 at 1 m (Open Data DC, CC BY 4.0), so the panel draws that measured canopy instead. It shows the canopy as of 2020. The District's map stops at its boundary, so where a site circle crosses into Maryland or Virginia, those parts use the same aerial-photo detection as the other cities, and the sheet's caption names both sources.

Chicago, Miami and Dallas — checked against canopy maps

Neither city has a street tree inventory we could match tree by tree, so the panel was checked against canopy maps instead. In Chicago, inside twelve census tracts, our share of canopy came within 2.8 points on average of the Chicago Region Trees Initiative's tract canopy (11 of 12 within 5 points; one tract in Bronzeville was 11 points high). In Miami, against Miami-Dade County's 2023 tree canopy (outlines traced from the county's aerial photos), eight areas came out at 15.8% against 15.2%, and 96% of the county's canopy lies within 3 m of ours. Around the towers of Brickell and Downtown our detection runs 2–5 points high: shadows again, but far less than in DC.

Dallas was checked the same way, against the City's canopy share in hexagons of about 0.3 km² (citywide mean 34%). Across 24 hexagons drawn at random, three from each quarter of the canopy range, our canopy came out 1.8 points high on average and within 3.9 points in absolute terms (18 of 24 within 5 points; two industrial hexagons in West Dallas were 9 and 13 points high). In six Downtown and Uptown hexagons it ran 1.9 points low — the towers' shadows did not read as trees. The City does not state the year of its canopy layer.

Masses and individuals

If every detected pixel is turned into a dot, forests come out wrong: a minimum-spacing algorithm lays the dots in a regular lattice, advertising an order that is not there. So where canopy density in a 40 ft window exceeds 0.7 we draw a continuous canopy (a mass), and only the rest as individual circles. That matches drawing convention — woodland as a hatch, street trees as circles. Circle radius is taken from how far vegetation extends in four directions (4–20 ft). Rendering takes 0.2–0.5 s.

Tree canopy diagram at the south end of Central Park, 1,000 ft radius — canopy as mass
South end of Central Park. Continuous canopy is drawn as mass; the trees along 59th Street as individuals.
This is not a tree-counting algorithm. Isolated street trees are mostly one circle each; in a park or woodland the plate must be read as a distribution. Do not quote "584 trees on this site".

The same detection feeds thermal comfort

The detection code lives in one place and the thermal comfort map uses the same mask for tree shade — otherwise the diagram and the map would drift apart. There, detected canopy is given an assumed height of 26 ft; that assumption is explained on that page.

Things to know

See the trees around your site →

© sitedia · Home · About · All guides · Terms · Privacy · 한국어