How it was measured
Loading.
The calibration problem
NAIP is an eight-bit picture, not a calibrated measurement. The vendor stretches each
delivered frame to fill the byte range and the stretch changes between frames, so the same
unchanged asphalt on one West Side block reads as NDVI −0.375 in the 2021 frame and
−0.075 in the 2022 one. A textbook threshold would therefore mean something different in
every frame.
Correcting that with a single gain, fitted so road pavement comes out at zero, is right in
the mid‑tones and wrong at both ends. Measured over 4.7 million pixels of surface that
cannot be vegetation, the ratio of red to raw infrared runs from 2.9 on dark surfaces to
1.2 on bright ones. Under one gain those same surfaces landed anywhere from NDVI
−0.13 to +0.35, so pale roofs crossed the vegetation threshold and 16% of roof
interiors came out as canopy. The correction here is a curve instead: reference surfaces are
binned by their raw infrared and the median red of each bin becomes a lookup, so every one of
them lands at zero whatever its brightness. Roof interiors now read 2.3% canopy, about
what real overhang on a narrow Buffalo lot should be.
How it was checked
150 random points on the land were scored by eye against the raw photograph, without the
classification visible, the way an i‑Tree Canopy survey is done. By eye, 27.3% of
them were under a tree crown, with a 95% interval of 20.2 to 34.5. The classifier says 23.0%,
inside that interval. Adjudicating the disagreements at thirteen pixels per metre with the
measured height alongside, nearly all of them turned out to be scoring errors of one kind:
calling shadowed lawn a crown, where the lidar puts the surface at ground level.
A first attempt at this check used 100 m crops and scored barely above chance, and the reason
is worth stating: in a Buffalo block a roof and a crown alternate every few metres, so the
crosshair’s own gap was wide enough to straddle both. Side‑by‑side rendering
showed the classification was pixel‑exact and the eye was the weak instrument. The check
was redone at five pixels per metre.
Sources
Imagery: USDA NAIP 60 cm four-band, September 2021 and September 2019, read as cloud-optimised
GeoTIFFs through Microsoft Planetary Computer.
Height: USGS 3DEP lidar, project NY_3County_2019, read over HTTP from the USGS public Entwine
bucket.
Boundaries: Census TIGERweb. Street tree inventory: City of Buffalo open data.
1938 grades: Mapping Inequality, University of Richmond.
Built by Ryan Sajdak. Companion to
Where the Trees Aren’t and
Ten Minutes to a Park.