This site is a guide to the Google Earth Engine implementation of the LandTrendr spectral-temporal segmentation algorithm.

diff --git a/docs/search_index.json b/docs/search_index.json
index 1850adf..aa19c23 100644
--- a/docs/search_index.json
+++ b/docs/search_index.json
@@ -1,5 +1,5 @@
[
-["index.html", "LT-GEE Guide Welcome", " LT-GEE Guide Welcome Documentation by Justin Braaten of Oregon State University’s eMapR Lab, directed by Dr. Robert Kennedy This site is a guide to the Google Earth Engine implementation of the LandTrendr spectral-temporal segmentation algorithm. Jump right in - plot a segmented time series or map disturbance with a GUI. A huge thanks goes out to Zhiqiang Yang (OSU) and the engineers at Google Earth Engine. This wouldn’t have been possible without your help! This work was supported with funding from the US Forest Service Landscape Change Monitoring System and the NASA Carbon Monitoring System (NNH13AW62I, PI: Cohen; NNX16AQ25G, PI: Kennedy), a Google Foundation Grant (Kennedy), and U.S. National Park Service Cooperative Agreement (P17AC00585) Check back occasionally for new GEE Apps, example scripts, and API functions. You might try doing a hard refresh on the site to make sure you see recent changes (what you’re looking at might be a previously cached version of the site) "],
+["index.html", "LT-GEE Guide Welcome", " LT-GEE Guide Welcome Documentation, Apps, and API by Justin Braaten of Oregon State University’s eMapR Lab, directed by Dr. Robert Kennedy This site is a guide to the Google Earth Engine implementation of the LandTrendr spectral-temporal segmentation algorithm. Jump right in - plot a segmented time series or map disturbance with a GUI. A huge thanks goes out to Zhiqiang Yang (OSU) and the engineers at Google Earth Engine. This wouldn’t have been possible without your help! This work was supported with funding from the US Forest Service Landscape Change Monitoring System and the NASA Carbon Monitoring System (NNH13AW62I, PI: Cohen; NNX16AQ25G, PI: Kennedy), a Google Foundation Grant (Kennedy), and U.S. National Park Service Cooperative Agreement (P17AC00585) Check back occasionally for new GEE Apps, example scripts, and API functions. You might try doing a hard refresh on the site to make sure you see recent changes (what you’re looking at might be a previously cached version of the site) "],
["introduction.html", "1 Introduction", " 1 Introduction This guide is intended to introduce the basics of running LandTrendr (LT) in Google Earth Engine (GEE). It describes the LT conceptual framework, what is required to run LT-GEE, how to run it, what the outputs are, and how they are formatted. It also provides three example scripts, a series of user interfaces to LT operations, and an API for opinionated, but easy use. LandTrendr is set of spectral-temporal segmentation algorithms that are useful for change detection in a time series of moderate resolution satellite imagery (primarily Landsat) and for generating trajectory-based spectral time series data largely absent of inter-annual signal noise. LT was originally implemented in IDL (Interactive Data Language), but with the help of engineers at Google, it has been ported to the GEE platform (porting paper; GEE overview; GEE paper). The GEE framework nearly eliminates the onerous data management and image-preprocessing aspects of the IDL implementation. It is also light-years faster than the IDL implementation, where computing time is measured in minutes instead of days. We assume that you have a GEE account, that you are somewhat familiar with the GEE JavaScript API, and have a basic understanding of LandTrendr (method, application). "],
["landtrendr.html", "2 LandTrendr 2.1 Fit-to-Vertex Image Data 2.2 Epoch Information", " 2 LandTrendr Each pixel in an image time series has a story to tell, LandTrendr aims to tell them succinctly. Let’s look at an example; here we have a pixel intersecting Lon: -123.845, Lat: 45.889 (Fig 2.1) from a conifer-dominated, industrial forest region of the Pacific Northwest, USA. At the beginning of its record, it was a mature, second-growth conifer stand, and for 17 years, little changed. Then, between the summers of 2000 and 2001 a service road was built through it, removing some of its vegetation. Over the next year it experienced a clearcut harvest, removing all of its remaining vegetation. For the last 14 years it has been regenerating. Most recently it was a closed canopy, maturing, conifer stand. Fig 2.1. Every pixel tells a story. Landsat provides a historical record of the character of landscapes. By extracting a single pixel from a time series of Landsat imagery, it is possible to recount the state and change of the features composing the 1-hectare area of a pixel through time. In this example, we analyze the history of a conifer forest pixel from an industrial forest region of the Pacific Northwest (USA) that experiences a period of relative stability, a dramatic, rapid loss of vegetation, and subsequent regeneration. The description of this example pixel’s history is of course abridged, and only conveys a moderate resolution perspective of state and change in forest character. The unabridged version of this pixel’s story includes many other small changes in the forest stand it represents, but given the precision of the satellite sensor and methods in processing, the provided description is the type of pixel history interpretation we are confident are represented well in the image time series. LandTrendr is a brevity algorithm that listens to the annual, verbose, noisy detail of a pixel’s story and writes an abridged version. In practice, LandTrendr takes a single point-of-view from a pixel’s spectral history, like a band or an index, and goes through a process to identify breakpoints separating periods of durable change or stability in spectral trajectory, and records the year that changes occurred. These breakpoints, defined by year and spectral index value, allow us to represent the spectral history of a pixel as a series of vertices bounding line segments (Fig 2.2). Fig 2.2. LandTrendr pixel time series segmentation. Image data is reduced to a single band or spectral index and then divided into a series of straight line segments by breakpoint (vertex) identification. There are two neat features that result from this segmented view of spectral history. The ability to interpolate new values for years between vertices. Simple geometry calculations on line segments provide information about distinct spectral epochs 2.1 Fit-to-Vertex Image Data The ability to interpolate new values for years between vertices is very useful. It ensures that each observation is aligned to a trajectory consistent with where the pixel has been and where it is going. We can think of this as hindsight-enhanced image time series data. It has two practical utilities. It can fill in data from missing observations in the time series (masked because of cloud or shadow) and it maintains consistency in predictive mapping through time; e.g. an annual forest classification is not likely to bounce between mature and old-growth conifer because of minor differences in spectral reflectance from atmosphere or shadow difference (Fig 2.3). Fig 2.3. Hindsight-enhanced image time series data. Identification of time series breakpoints or vertices, allows the observations between vertices to be interpolated, removing extraneous information and placing each observation in the context of the trajectory it is part of. This is useful in filling missing observations because of cloud and shadow, and makes for more consistent annual map prediction. Since breakpoints or vertices are defined by a year we also have the ability to impose breakpoints identified in one spectral band or index on any other. For instance, we can segment a pixel time series cast as Normalized Burn Ratio (NBR: [NIR-SWIR]/[NIR+SWIR]) to identify vertices, and then segment a short-wave infrared (SWIR) band based on the NBR-identified vertices (Fig 2.4). Fig 2.4. Impose the segmentation structure of one spectral representation on another. Here we have identified four breakpoints or vertices for a pixel time series using NBR, and then used the year of those vertices to segment and interpolate the values of a SWIR band time series for the same pixel. This is useful because we can make the whole data space for a pixel’s time series consistent relative to a single perspective (Fig 2.5) and summarize starting, ending, and delta values for all spectral representations for the same temporal segments, which can be powerful predictors of land cover, agent of change, and state transitions. Fig 2.5. A stack of spectral representations can be standardized to the segmentation structure of a single spectral band or index. Here we are demonstrating the standardization of tasseled cap brightness, greenness, and wetness to the segmentation structure of NBR. This allows us to take advantage of multi-dimensional spectral space to describe the properties of spectral epochs and breakpoints to predict land cover, change process, and transitions from a consistent perspective (NBR). 2.2 Epoch Information The second neat feature of a segmented world view of spectral history is that simple geometry calculations can summarize attributes of spectral epochs (Fig 2.6). Temporal duration and spectral magnitude can be calculated for each segment based on the vertex time and spectral dimensions. These attributes allow us to easily query the data about when changes occur, how frequently they occur, on average how long do they last, what is the average magnitude of disturbance (or recovery) segments, etc. We can also query information about adjacent segments to focal segments. For instance, we can ask, what it the average rate of recovery following a disturbance segment, or what was the trajectory of a pixel time series prior to disturbance segments that we’ve attributed to fire. Fig 2.6. Diagram of segment attributes. From these attributes we can summarize and query change per pixel over the landscape. "],
["lt-gee-requirements.html", "3 LT-GEE Requirements 3.1 Image Collection 3.2 LT parameters", " 3 LT-GEE Requirements LT-GEE requires two things: An annual image collection A set of parameters to control segmentation 3.1 Image Collection The image data composing a collection needs to represent an observation that is consistent through time. It should not include noise from atmosphere, clouds and shadows, sensor differences, or other anomalies. The annual changes in a time series should be the result of changes in the physical features of a landscape. The examples, GUIs, and API functions in this guide use the USGS Landsat Surface Reflectance Tier 1 data sets. These data have been atmospherically corrected, and include a cloud, shadow, water and snow mask produced using CFMASK. GEE ImageCollection IDs for USGS Landsat Surface Reflectance Landsat 5: LANDSAT/LT05/C01/T1_SR Landsat 7: LANDSAT/LE07/C01/T1_SR Landsat 8: LANDSAT/LC08/C01/T1_SR Although we use Landsat surface reflectance bands and spectral indices, be creative and try other data such as probability of a certain cover type, predicted percent cover of some cover type, other earth observation sources, etc. LandTrendr does not care what the data are, it will simply reduce the provided time series to a small number of segments and record information about when the signal changes. The collection must include only one observation per year. However, because clouds are often present in any given image, it is best to retrieve multiple images for a season, mask out clouds and cloud shadows from each, and then create a composite of those images so that you have reasonable annual spatial coverage of clear-view pixels. The best-pixel-compositing method you apply is up to you. We have used nearness to a target day-of-year and also medoid compositing, we prefer the later and include it in the provided examples. LandTrendr will segment the first band in the image collection and generate annual fitted-to-vertex (FTV) data for each subsequent band. Consequently, you need to manipulate your collection so that the band or spectral index you want segmented is the first band, and any additional bands you want fitted to vertices should follow. The band or index you select for segmentation should be based on an informed decision weighted by the sensitivity of it to change in the conditions of the landscape you are working with. The best spectral representation of change can be different for shrubs vs trees vs conifers vs deciduous etc. We have found SWIR bands, and indices leveraging them, to be generally quite sensitive to change, but we also know that it is highly variable. You should try segmenting on several bands or indices to see what works best. We also recommend trying a few different date windows and widths for generating annual composites. In the example scripts provided, we composite image dates for the northern hemisphere growing season (mid-June through mid-September), which seems to work pretty well for 25-50 degrees latitude. Folks working in the southern hemisphere will need to modify the example scripts if you are to include images from your growing season, since it crosses the new year: December 2016 through February 2017, for example. You’ll also have to deal with how to label the year of the annual image composite - should it be the former or later year of the growing season composite? Two really important steps in image collection building include 1) masking cloud and cloud shadow pixels during annual image compositing and to 2) ensure that the spectral band or index that is to be segmented is oriented so that vegetation loss is represented by a positive delta. For instance, NBR in its native orientation results in a negative delta when vegetation is lost from one observation to the next. In this case, NBR must be multiplied by -1 before being segmented. Conversely, if Landsat TM band 5 (SWIR) is selected for segmentation, inversion of the spectral values is not required, since natively, vegetation loss is represented by a positive delta. Note that within the API we provide functions to build annual Landsat surface reflectance collections and convert them to collections formatted for use by LandTrendr. See the buildSRcollection and buildLTcollection functions in the API Functions section. 3.2 LT parameters The LT-GEE function takes 9 arguments: 8 control parameters that adjust how spectral-temporal segmentation is done, and the annual image collection. The original LandTrendr paper describes the effect and sensitivity of changing some of these argument values. We recommend trying variations in settings to see what works best for the environment you are working in. One of the great things about having LT in GEE is that parameter settings are easy and fast to iterate through to find a best set. Table 3.1: LandTrendr parameters Parameter Type Default Definition maxSegments Integer Maximum number of segments to be fitted on the time series spikeThreshold Float 0.9 Threshold for dampening the spikes (1.0 means no dampening) vertexCountOvershoot Integer 3 The inital model can overshoot the maxSegments + 1 vertices by this amount. Later, it will be prunned down to maxSegments + 1 preventOneYearRecovery Boolean false Prevent segments that represent one year recoveries recoveryThreshold Float 0.25 If a segment has a recovery rate faster than 1/recoveryThreshold (in years), then the segment is disallowed pvalThreshold Float 0.1 If the p-value of the fitted model exceeds this threshold, then the current model is discarded and another one is fitted using the Levenberg-Marquardt optimizer bestModelProportion Float 1.25 Takes the model with most vertices that has a p-value that is at most this proportion away from the model with lowest p-value minObservationsNeeded Integer 6 Min observations needed to perform output fitting timeSeries ImageCollection Collection from which to extract trends (it’s assumed that each image in the collection represents one year). The first band is used to find breakpoints, and all subsequent bands are fitted using those breakpoints "],