Lab 8: Change Detection and Time Series
Spectral differencing, classification comparison, and Landsat time-series segmentation
Background
On the evening of September 7, 2020, a downed utility line ignited dry grass in the McKenzie River valley east of Eugene, Oregon. By the following morning the fire had crossed the river. By the end of the week it had consumed more than 165,000 acres of dense Douglas-fir and western hemlock forest between Blue River and Vida — the largest fire in Lane County’s recorded history. Satellites recorded the pre-fire landscape hours before the ignition and tracked the burn scar and recovery in the months that followed. Lab 8 opens here, but not because the fire is the hardest case we will encounter. It is because the fire is easy: the signal is so large that even a naive measurement strategy will find it. The harder question — and the one this lab is designed to teach — is how to build a measurement framework that still works when the signal is smaller, slower, and harder to disentangle from natural variation.
The core challenge in change detection is that any landscape image is a snapshot of a single moment, and that moment carries information we do not want to interpret as change. Seasons advance. Phenology shifts. Soil moisture fluctuates with the water table. A pixel photographed in August looks different from the same pixel photographed in February — not because the land changed but because photosynthesis is seasonal. Making two images subtract meaningfully requires deliberate control over these nuisance sources of variance: same sensor, same season, same atmospheric correction, and ideally matched viewing geometry. Campbell §15.1 frames these as the four pre-conditions for valid change detection, and violating any one of them produces a difference image that is measuring something other than land cover change. The Holiday Farm Fire makes those pre-conditions almost invisible — a catastrophic fire generates a signal so large that a poorly matched image pair still shows it. But the same methods applied to gradual forest thinning, agricultural expansion, or coastal wetland loss have to earn their conclusions from signals that are an order of magnitude smaller, and there the pre-conditions become the analysis.
Lab 8 presents three approaches to that challenge, each with a different theory of what “change” means. Spectral image differencing asks: did the index value at this pixel change enough between T1 and T2 to cross a threshold we judge as meaningful? It is fast, transparent, and spatially complete, but it collapses all change into a single magnitude value without attributing type. Post-classification comparison first assigns a land-cover label to each pixel in both periods and then asks: did the label change? This recovers attribution — we learn not just that a pixel changed but whether it went from forest to agriculture or forest to barren — at the cost of compounding the classification errors of two independent maps. LandTrendr abandons the two-date framework entirely and fits a piecewise linear model to the full Landsat archive, treating each pixel as a trajectory through spectral space and asking: where along that trajectory did a disturbance occur, and when? The three methods are not ranked — they answer different questions, and choosing among them is an analytical decision that the final section of this lab asks us to make explicitly for our own research sites.
Part 1 — Spectral Image Differencing
The algebraic logic of spectral image differencing is almost brutally simple: compute a spectral index for both dates, subtract the earlier from the later, and classify pixels below a negative threshold as loss and above a positive threshold as gain. The appeal is transparency — every computational step is visible and reversible — and spatial completeness — every pixel receives a change value, not just the pixels we sampled. The complication is that the threshold is a free parameter with no universal value. Campbell §15.2 identifies this as the central tension of the method: distinguishing real change from sensor noise and phenological variance requires calibrating the threshold to the specific landscape and index, and calibration in practice means inspecting the histogram of the difference image and deciding where signal ends and noise begins. In the Holiday Farm study area, where fire signal dwarfs sensor noise, the threshold decision is nearly inconsequential. In a landscape with gradual, patchy change, it is the most consequential decision in the analysis.
The index we use in Part 1 is NBR — the Normalized Burn Ratio, (NIR − SWIR2) / (NIR + SWIR2). The physical argument for NBR over NDVI for fire detection runs through the shortwave-infrared band. Healthy green vegetation has high NIR reflectance (loose mesophyll cell structure scatters NIR efficiently) and very low SWIR2 reflectance (liquid water in leaf tissue absorbs strongly near 2.2 µm), putting NBR near +1. Fire destroys both: it removes canopy, desiccates remaining vegetation, and exposes bare soil and charred material, which have moderate NIR and elevated SWIR2. The post-fire NBR drop is therefore large, spectrally clean, and directionally consistent — severely burned pixels can fall from +0.80 to −0.30 in a single season — which is why NBR is the index underlying the USGS Monitoring Trends in Burn Severity (MTBS) national burned-area database. The sign convention T2 − T1 makes burned pixels appear as large negative values in the difference image: where NBR declined, the difference is negative; where secondary vegetation recovered or grew, it is positive.
The study area for Part 1 is the upper McKenzie River watershed in the Cascade Range foothills of Lane County, Oregon. T1 captures a pre-fire dry-season composite (July–September 2020, before the September 7 ignition); T2 captures the same seasonal window one year later (July–September 2021). The one-year offset satisfies Campbell §15.1’s same-season condition and avoids conflating phenological differences between spring and fall with fire-driven change. The MTBS program mapped approximately 173,000 acres of burn area for the Holiday Farm event; our AOI captures the full burn scar plus a margin of unburned forest along all sides, so the difference image can be inspected against a stable background.
Part 2 — Post-Classification Comparison
Image differencing tells us that a pixel changed and by how much. It does not tell us what it changed from or to. That limitation becomes analytically important whenever the research question requires attribution. A forest clearing converted to pasture, a clearing converted to bare soil for a mining operation, and a clearing caused by wind throw all produce similar large-negative NBR values in a difference image — they are indistinguishable by magnitude alone — but they represent ecologically and legally different outcomes. Post-classification comparison recovers attribution by working with labeled maps rather than continuous index values. If we can produce a classified map for both T1 and T2 using the same class scheme, we can read the change type directly from the pair of labels at each pixel.
The implementation follows Campbell §15.3: encode each pixel as a two-digit integer, T1class × 10 + T2class. A stable Forest pixel (class 0 both periods) gets code 00. A pixel that converted from Forest (0) to Agriculture (1) gets code 01. A pixel that converted from Developed (1) to Herbaceous (3) gets code 13. Off-diagonal codes in the resulting matrix are real transitions; diagonal codes are stable. The matrix is simultaneously a classified change map (showing where each transition occurred) and a tabular summary (showing how much area moved between each class pair). Visualizing the full 25-code palette over the Salish Sea bioregion lets us inspect the spatial coherence of detected transitions — real transitions from land management tend to cluster at concession boundaries, road edges, and river corridors, while classifier noise tends to appear as a spatially random salt-and-pepper pattern.
The price for this attribution is accuracy. The theoretical accuracy of a post-classification change map is approximately the product of the individual classification accuracies (Campbell §15.3). If two maps each sit around 83% overall accuracy — within the range a five-class Random Forest like ours tends to produce on an independent reference set — the theoretical change-map accuracy is roughly 69%, meaning that roughly 30% of detected “transitions” in the matrix are compositional noise rather than real land-cover change. We can anticipate where that noise will concentrate: the classes with the lowest individual user’s and producer’s accuracies (typically spectrally similar pairs like Developed and Herbaceous in the Lab 6 scheme) will produce the largest off-diagonal entries that cannot be explained ecologically. Distinguishing real transitions from noise in the from-to table requires the matrix and external knowledge of which class pairs are plausible in this landscape. Entries that are both large and ecologically implausible at this spatial and temporal scale are almost certainly noise.
Part 3 — LandTrendr Time-Series Analysis
The two-date framework we used in Parts 1 and 2 is powerful but historically blind. We select two moments, compare them, and call the difference change. Everything that happened before and between those moments — a fire that burned and substantially recovered, a forest clearcut and replanted on a 20-year rotation, a wetland that dried in a drought year and reflooded — is invisible unless we happen to have selected dates that straddle the event. LandTrendr was built to address exactly this limitation. Rather than asking “what changed between two dates,” it asks “what is the history of this pixel’s spectral state?”
The algorithm, described fully in Cardille F17 and Kennedy et al. (2018), takes the Landsat archive for a pixel — annual spectral index composites from 1984 to the present — and fits a sequence of straight-line segments (a piecewise linear model) to that time series. The fitted segments are not a smoothing filter; they are a structural model of the pixel’s trajectory. Each inflection point — a vertex — marks a moment where the trajectory changed direction: a disturbance that caused a rapid index decline, a recovery that reversed it, or a conversion that moved the pixel permanently to a new spectral state. The algorithm identifies disturbance events as the vertices where the fitted value drops most sharply, and characterizes each event by its year, its magnitude (how large the drop was), and its duration (how quickly or slowly the change completed).
Reading a pixel trajectory is the interpretive core of Part 3, and it is worth spending time on three contrasting examples before running the Change Mapper over the full AOI. An unburned-contrast pixel — a stable mature forest stand outside the burn perimeter — produces a nearly horizontal fitted line at high index values, with small year-to-year variation from cloud contamination and phenology, no significant vertices, and no disturbance signature. A fire-core pixel shows a sharp downward vertex in the disturbance year, with a subsequent fitted line sloping gradually upward as vegetation regenerates — the shape of the recovery arc (steep at first, flattening as canopy closes) mirrors the successional trajectory of the ecosystem. A clearcut pixel shows a similarly sharp downward vertex but with a flat nadir that persists for many years rather than recovering, because replanted conifers take a decade or more to close enough canopy to re-enter the near-infrared spectral space occupied by mature forest. These three shapes — stable plateau, abrupt-drop-with-recovery, abrupt-drop-with-flat-nadir — are the primary interpretive vocabulary of LandTrendr.
Two parameter decisions deserve close attention before running the Change Mapper. The first is the distinction between Year Range and Filter by Year, two parameters that both involve years but operate at completely different stages of the analysis. Year Range controls the input window over which the piecewise model is built: LandTrendr uses the full archive within this window to learn what “normal” seasonal variation looks like for this pixel, and it can only identify a departure from normal if it has seen enough normal years to establish a baseline. A 25-year window (2000–2024) is almost always better than a 5-year window because a longer record gives the algorithm more context, makes the baseline more robust, and allows it to distinguish a genuine disturbance from an anomalous single year. Filter by Year operates after the model is built: it is a display filter that restricts which detected disturbances appear on the map to those falling within the specified window. These two parameters are independent. Setting Filter by Year to 2018–2024 does not rebuild the model on a 2018–2024 archive — it builds the full model on whatever Year Range covers and then shows only the detections that fall within 2018–2024. Using a long Year Range with a narrow Filter by Year is the correct approach when we care about a specific disturbance window but want the full archive context to identify it reliably.
The second decision is the magnitude threshold. The Change Mapper accepts this value in raw index units (the same ±0.10 scale we used in Part 1) — though some builds default the field to a ×1000 form, where 0.10 appears as 100. The Pixel Time Series Plotter generally displays magnitudes on the ×1000 scale, so confirm which scale each tool is using before reading a value across from one to the other. The L8.3 console instructions name the exact value to enter. Whether that threshold is appropriate depends entirely on the landscape: in the Holiday Farm AOI, where fire signal is large, a threshold of 0.10 is permissive and will detect nearly everything in the burn perimeter. In a heterogeneous agricultural or tropical landscape, the same threshold will flag minor spectral fluctuations as disturbances, producing a noisy map of meaningless detections. The most efficient calibration strategy is to examine pixel trajectories in the Plotter first, note the actual magnitude of the disturbance events we care about, and set the threshold just below that magnitude so that the events of interest pass the filter while annual noise does not.
Part 4 — Final Project Application
Parts 1–3 each applied a prescribed method to a prescribed study area. Part 4 inverts that structure: we bring our own site, our own sensor, and our own research question, and choose the method — or combination of methods — that fits the analysis we actually need. The EX1 script provides scaffolding for all three methods but requires only one. The choice is itself analytical, and the reasoning behind it is part of the analysis — not an afterthought.
A few practical constraints are worth stating before making that choice. Image differencing (Method A) is available for any multispectral sensor with appropriate band coverage, and is the right tool when the change signal is expected to be large relative to background variation and a two-date comparison captures the full extent of the event. Post-classification comparison (Method B) requires classified maps for both periods using the same class scheme — if high-quality classified maps already exist from Lab 6/7, this is a natural extension; if classification would need to be built from scratch for a new sensor, Method A or C may be more practical. LandTrendr (Method C) requires Landsat imagery specifically and is not applicable to Sentinel-2 or other non-Landsat sensors; it is the right tool when the research question is temporal — not just did change occur but when, and whether it was abrupt or gradual. For any method, the final-project documentation should record the index or classification scheme, the threshold or parameter choices, and the analytical reasoning for those choices — not just what the script did but why.
Guiding Questions
ESCI 442/542 — Introduction to Remote Sensing | Western Washington University