Lab 8: Change Detection and Time Series

Spectral differencing, classification comparison, and Landsat time-series segmentation

Author

Dr. Francisco Laso, ESCI 442/542 — Introduction to Remote Sensing

Lab 8 Module 8 — Change Detection and Time Series
Readings due before lab: Campbell Ch. 15 — Change Detection  |  Cardille Ch. F16 — Change Detection  |  Cardille Ch. F17 — LandTrendr

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.


Note

Lab Objectives

By the end of this lab you will be able to:

  1. Apply the Normalized Burn Ratio (NBR) to a pair of Landsat composites and classify loss, gain, and stable pixels using a manual threshold (Campbell §15.2; Cardille F16)
  2. Explain why same-sensor, same-season image pairs are a pre-condition for valid change detection results (Campbell §15.1)
  3. Produce a post-classification from-to change matrix by overlaying two classified maps, encode each transition as a two-digit class code, and quantify per-transition area (Campbell §15.3)
  4. Quantify how classification error compounds across two maps and explain why post-classification change accuracy is theoretically bounded by the product of the individual accuracies (Campbell §15.3)
  5. Use the LandTrendr Pixel Time Series Plotter to visualize a pixel’s spectral trajectory through the Landsat archive and identify the year, form, and magnitude of a disturbance event (Cardille F17 §17.2)
  6. Map the year of greatest spectral disturbance across a study area using the LandTrendr Change Mapper, interpret the Year of Detection output layer, and calibrate the magnitude threshold using pixel trajectories (Cardille F17 §17.3)
  7. Select an appropriate change detection method for your final project sensor and research question and apply it to your AOI

Warning

Before You Begin


Tip

Additional Resources

LandTrendr is new in this course. Two resources are worth keeping open during Part 3:

  • Kennedy, R. E., Yang, Z., Gorelick, N., Braaten, J., Cavalcante, L., Cohen, W. B., & Healey, S. (2018). Implementation of the LandTrendr algorithm on Google Earth Engine. Remote Sensing, 10(5), 691. Section 3 explains the piecewise segmentation algorithm — specifically what the “fitted values” line in the plotter represents and why it differs from the raw annual observations
  • LandTrendr GEE User Guide (Kennedy Lab, Oregon State University) — the reference for all GUI parameters. When a parameter label in the Change Mapper panel is not self-explanatory, look it up here before changing it

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.

Note

Script L8.1 covers:

The L8.1 script builds Landsat 8 dry-season composites for T1 (2020, pre-fire) and T2 (2021, post-fire), computes NBR for each period, and subtracts T1 from T2. A threshold of ±0.10 classifies pixels into loss and gain; per-class area is computed in km² and printed to the console. Confirm Checkpoint L8-CP1 before continuing — the script prints the loss area, which should be approximately 630–660 km², representing the moderate-to-high-severity burn visible within the AOI.

NBR difference image classified into loss (pink), gain (blue), and stable (pale yellow) pixels using a ±0.10 threshold. The loss zone traces the 2020 Holiday Farm burn scar within the McKenzie River AOI.

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.

Note

Script L8.2 covers:

The L8.2 script loads the Lab 6 T1 classified map, builds a T2 Landsat 8/9 composite (July–September 2024), re-trains the Lab 6 Random Forest classifier, and applies it to T2. It encodes from-to transition codes, remaps sparse two-digit codes to sequential indices for palette rendering, and computes per-transition area using a grouped pixel-area reducer. Confirm Checkpoint L8-CP2 — the transition area table should be visible in the console, and the from-to map should display the 25-color palette over the Salish Sea region.


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.

Pixel time-series trajectory (LandTrendr fitted line) for a clearcut site near the western edge of the AOI. Notice the post-disturbance trajectory shape — compare it to what you observe for the fire-core pixel when examining both in the Pixel Plotter.

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.

Note

Script L8.3 covers:

The L8.3 script centers the map on the Holiday Farm Fire AOI, adds three annotated demo pixel markers (fire core, unburned contrast, clearcut contrast), and prints step-by-step console instructions for navigating to both external LandTrendr GUI tools. Both tools are hosted in the emaprlab/public GEE repository and open as separate browser tabs — the script does not execute the LandTrendr algorithm itself. Confirm Checkpoint L8-CP3 after running both tools: pixel trajectory plots examined and recorded for all three demo pixels, and the Year of Detection layer visible for the Holiday Farm AOI.

LandTrendr Change Mapper Magnitude layer for the Holiday Farm AOI. Pixel brightness reflects the size of the NBR drop at the detected disturbance vertex; magnitude values are expressed in index units × 1000.

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.

Note

Script EX1 covers:

The EX1 script provides a sensor-agnostic scaffold for all three change detection methods. Define your AOI, time periods, sensor, and method-specific parameters in the CONFIGURATION section, then complete the section(s) corresponding to the method(s) you chose. Confirm Checkpoint L8-EX1 — at least one classified change layer visible for your final project site, with area statistics or pixel trajectory notes in the console.


Guiding Questions

Tip

Guiding Questions for Your Analysis

Consider the following questions as you work through the lab. They are thinking tools, not a required checklist — focus on the ones that most directly illuminate your own results.

  • The NBR histogram’s shape. The histogram of the NBR difference image shows most pixels clustered near zero with a pronounced tail in one direction. What does the zero-peak represent physically, and what does the tail represent? How would the histogram look if the fire had burned at uniformly low severity — same total burned area, but no concentrated high-severity core?

  • Same-season as a precondition. Campbell §15.1 identifies same-season image acquisition as a precondition for valid change detection. Describe a specific scenario in which acquiring T1 in winter and T2 in late summer over this forest landscape would produce a large apparent “loss” signal unrelated to the 2020 fire. Which spectral bands or index values would drive the false signal?

  • Error compounding in post-classification comparison. The theoretical change-map accuracy for two maps each at ~83% overall accuracy is approximately 69%. Where does that number come from mathematically, and how would you expect the per-class change accuracy to vary across the five land-cover types? Which class pairs would you expect to generate the most noise in the from-to matrix?

  • Interpreting large off-diagonal entries. When a large off-diagonal entry appears in the transition table — say, Developed → Herbaceous — what is the most likely explanation: real land-cover change, or classifier noise? What would you need to verify to be certain?

  • Year Range versus Filter by Year. What does each of these two Change Mapper parameters actually control? A colleague sets Year Range to 2018–2024 to “focus the model on recent years.” What is the analytical problem with that configuration, and what would a correct setup look like to map only 2018–2024 disturbances while maximizing model quality?

  • Fire versus clearcut trajectory shapes. After examining the three demo pixels in the Pixel Plotter, describe how the shape of the fitted trajectory — not just the magnitude of the drop — differs between the fire-core pixel and the clearcut pixel. What ecological process drives the recovery arc in the fire-core pixel? Why does a replanted clearcut of similar disturbance magnitude not show the same arc over the same time window?

  • Method selection for your final project. Which change detection method best fits your final project sensor and research question, and why? Consider both sensor constraints (is Landsat available? is the archive long enough for LandTrendr?) and the type of change you expect — abrupt versus gradual, spectrally large versus subtle. What is the most consequential limitation of the method you chose, and how would you address it given more time or data?


ESCI 442/542 — Introduction to Remote Sensing | Western Washington University