Skip to content

Commit

Permalink
changes
Browse files Browse the repository at this point in the history
  • Loading branch information
jdbcode committed Jun 8, 2018
1 parent 3c394e0 commit e49d269
Show file tree
Hide file tree
Showing 19 changed files with 90 additions and 86 deletions.
26 changes: 14 additions & 12 deletions bookdown/01-introduction.Rmd
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
# Introduction

LandTrendr is set of spectral-temporal segmentation algorithms that are useful
LandTrendr (LT) 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. LandTrendr was originally implemented in IDL
(Interactive Data Language), but with the help of engineers at Google, it has
been ported ([paper](http://www.mdpi.com/2072-4292/10/5/691)) to the Google Earth Engine (GEE) platform
([overview](https://earthengine.google.com/), [paper](https://github.com/eMapR/LT-GEE/blob/master/docs/gorelick_etal_2017_google_earth_engine.pdf)).
inter-annual signal noise.
LandTrendr was originally implemented in IDL (Interactive Data Language),
but with the help of engineers at Google, it has been ported to the Google Earth Engine (GEE) platform
([porting paper](http://www.mdpi.com/2072-4292/10/5/691); [GEE overview](https://earthengine.google.com/); [GEE paper](https://www.sciencedirect.com/science/article/pii/S0034425717302900)).
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.

This guide is intended to introduce the basics of running LandTrendr in GEE.
It describes the LandTrendr conceptual framework, what is required to run LT-GEE, how to run it, what the outputs are and how they are formatted, and provides three example scripts. It is assumed that you have a
[GEE account](https://signup.earthengine.google.com/#!/), that you are
somewhat familiar with the [GEE JavaScript API](https://developers.google.com/earth-engine/),
and have a basic understanding of LandTrendr
([method](https://github.com/eMapR/LT-GEE/blob/master/docs/kennedy_etal_2010_landtrendr.pdf),
[application](https://github.com/eMapR/LT-GEE/blob/master/docs/kennedy_etal_2012_disturbance_nwfp.pdf)).
**This guide is intended to introduce the basics of running LandTrendr in GEE.
It describes the LandTrendr 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 the LT operations, and a shortcut JavaScript library.**

It is assumed that you have a [GEE account](https://signup.earthengine.google.com/#!/),
that you are somewhat familiar with the [GEE JavaScript API](https://developers.google.com/earth-engine/),
and have a basic understanding of LandTrendr ([method](http://geotrendr.ceoas.oregonstate.edu/files/2015/05/Kennedy_etal2010.pdf),
[application](http://geotrendr.ceoas.oregonstate.edu/files/2015/05/kennedy_etal_2012_nwfp.pdf)).
32 changes: 16 additions & 16 deletions bookdown/02-landtrendr.Rmd
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 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 1) from a conifer-dominated,
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.
Expand All @@ -10,26 +10,26 @@ recently it was a closed canopy, maturing, conifer stand.

<img src='imgs/pixel_story.jpg'>

*Fig 1. Every pixel tells a story. Landsat provides a historical record of the character of landscapes. By
*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.*
<br><br>

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 errors in processing, the provided description is the type of pixel history interpretation we are
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 in spectral trajectory, and records the year that changes
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).
pixel as a series of vertices bounding line segments (Fig 2.2).

<img src='imgs/segmentation.png'>


*Fig 2. LandTrendr pixel time series segmentation. Image data is reduced to a single band or spectral index and then
*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.*
<br><br>

Expand All @@ -40,51 +40,51 @@ There are two neat features that result from this segmented view of spectral his



## Fit-to-vertex Image Data
## 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 3).
shadow difference (Fig 2.3).

<img src='imgs/seg_index_ftv.png'>

*Fig 3. Hindsight-enhanced image time series data. Identification of time series breakpoints or vertices, allows the observations
*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.*
<br><br>

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 4).
to identify vertices, and then segment a short-wave infrared (SWIR) band based on the NBR-identified vertices (Fig 2.4).

<img src='imgs/other_index_ftv.png'>

*Fig 4. Impose the segmentation structure of one spectral representation on another. Here we have identified four breakpoints or
*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.*
<br><br>

This is useful because we can make the whole data space for a pixel’s time series consistent relative to a single perspective (Fig 5) and
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.

<img src='imgs/all_index_ftv.png'>

*Fig 5. A stack of spectral representations can be standardized to the segmentation structure of a single spectral band or index. Here
*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).*
<br><br>


## Epoche Information
## 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 6). Temporal duration and spectral magnitude can be calculated for each segment based on the vertex time and
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,
Expand All @@ -93,5 +93,5 @@ or what was the trajectory of a pixel time series prior to disturbance segments
<img src='imgs/segment_attributes.png'>


*Fig 6. Diagram of segment attributes. From these attributes we can summarize and query change per pixel over the landscape.*
*Fig 2.6. Diagram of segment attributes. From these attributes we can summarize and query change per pixel over the landscape.*
<br><br>
4 changes: 2 additions & 2 deletions bookdown/03-requirements.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ The collection must include only one observation per year. However, because clou
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](#examples). LandTrendr will segment the first band in the image collection and generate annual fitted-to-vertx (FTV) data for each subsequent band. Consequently, you need to manipulate your collection so that the band or spectral index you
it in the provided [examples](#example-scripts). LandTrendr will segment the first band in the image collection and generate annual fitted-to-vertx (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](#examples) 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 Feburary 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?
In the [example scripts](#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 Feburary 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?

<a id='importantsteps'></a>**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.
Expand Down
2 changes: 1 addition & 1 deletion bookdown/07-example-scripts.Rmd
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Example Scripts
# Example Scripts {#example-scripts}


Three use case examples are provided, each of them begins with the same process of parameter definition and collection building and then varies on what is done with the results from the LT-GEE call. Keep in mind that these are simple building blocks to learn from. The parameter settings, methods for building collections, and the way we handle outputs in these examples are not intended to be standard protocol. We hope that the GEE community will help us develop better scripts and push what we can learn about our dynamic Earth using the LT-GEE tool.
Expand Down
8 changes: 4 additions & 4 deletions bookdown/11-references.Rmd
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# References

>[Gorelick, N., Hancher, M., Dixon, M., Ilyushchenko, S., Thau, D., & Moore, R. (2017). Google Earth Engine: Planetary-scale geospatial analysis for everyone. *Remote Sensing of Environment, 202*, 18-27.](https://github.com/eMapR/LT-GEE/blob/master/docs/gorelick_etal_2017_google_earth_engine.pdf)
>[Gorelick, N., Hancher, M., Dixon, M., Ilyushchenko, S., Thau, D., & Moore, R. (2017). Google Earth Engine: Planetary-scale geospatial analysis for everyone. Remote Sensing of Environment, 202, 18-27.](https://www.sciencedirect.com/science/article/pii/S0034425717302900)
>[Kennedy, R. E., Yang, Z., & Cohen, W. B. (2010). Detecting trends in forest disturbance and recovery using yearly Landsat time series: 1. LandTrendr—Temporal segmentation algorithms. *Remote Sensing of Environment, 114*(12), 2897-2910.](https://github.com/eMapR/LT-GEE/blob/master/docs/kennedy_etal_2010_landtrendr.pdf)
>[Kennedy, R. E., Yang, Z., & Cohen, W. B. (2010). Detecting trends in forest disturbance and recovery using yearly Landsat time series: 1. LandTrendr—Temporal segmentation algorithms. Remote Sensing of Environment, 114(12), 2897-2910.](http://geotrendr.ceoas.oregonstate.edu/files/2015/05/Kennedy_etal2010.pdf)
>[Kennedy, R. E., Yang, Z., Cohen, W. B., Pfaff, E., Braaten, J., & Nelson, P. (2012). Spatial and temporal patterns of forest disturbance and regrowth within the area of the Northwest Forest Plan. Remote Sensing of Environment, 122, 117-133.](https://github.com/eMapR/LT-GEE/blob/master/docs/kennedy_etal_2012_disturbance_nwfp.pdf)
>[Kennedy, R. E., Yang, Z., Cohen, W. B., Pfaff, E., Braaten, J., & Nelson, P. (2012). Spatial and temporal patterns of forest disturbance and regrowth within the area of the Northwest Forest Plan. Remote Sensing of Environment, 122, 117-133.](http://geotrendr.ceoas.oregonstate.edu/files/2015/05/kennedy_etal_2012_nwfp.pdf)
>[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, 691.](https://github.com/eMapR/LT-GEE/blob/master/docs/kennedy_etal_2018_lt-gee.pdf)
>[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, 691.](http://www.mdpi.com/2072-4292/10/5/691)
>[Roy, D. P., Kovalskyy, V., Zhang, H. K., Vermote, E. F., Yan, L., Kumar, S. S., & Egorov, A. (2016). Characterization of Landsat-7 to Landsat-8 reflective wavelength and normalized difference vegetation index continuity. Remote Sensing of Environment, 185, 57-70.](https://www.sciencedirect.com/science/article/pii/S0034425715302455)
3 changes: 2 additions & 1 deletion bookdown/index.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
#title: "LT-GEE"
site: bookdown::bookdown_site
documentclass: book
output:
output:
bookdown::gitbook:
#split_by: none
config:
toc:
collapse: section
Expand Down
4 changes: 2 additions & 2 deletions docs/example-scripts.html
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@
<li class="chapter" data-level="" data-path="index.html"><a href="index.html"><i class="fa fa-check"></i>LT-GEE</a></li>
<li class="chapter" data-level="1" data-path="introduction.html"><a href="introduction.html"><i class="fa fa-check"></i><b>1</b> Introduction</a></li>
<li class="chapter" data-level="2" data-path="landtrendr.html"><a href="landtrendr.html"><i class="fa fa-check"></i><b>2</b> LandTrendr</a><ul>
<li class="chapter" data-level="2.1" data-path="landtrendr.html"><a href="landtrendr.html#fit-to-vertex-image-data"><i class="fa fa-check"></i><b>2.1</b> Fit-to-vertex Image Data</a></li>
<li class="chapter" data-level="2.2" data-path="landtrendr.html"><a href="landtrendr.html#epoche-information"><i class="fa fa-check"></i><b>2.2</b> Epoche Information</a></li>
<li class="chapter" data-level="2.1" data-path="landtrendr.html"><a href="landtrendr.html#fit-to-vertex-image-data"><i class="fa fa-check"></i><b>2.1</b> Fit-to-Vertex Image Data</a></li>
<li class="chapter" data-level="2.2" data-path="landtrendr.html"><a href="landtrendr.html#epoch-information"><i class="fa fa-check"></i><b>2.2</b> Epoch Information</a></li>
</ul></li>
<li class="chapter" data-level="3" data-path="lt-gee-requirements.html"><a href="lt-gee-requirements.html"><i class="fa fa-check"></i><b>3</b> LT-GEE Requirements</a><ul>
<li class="chapter" data-level="3.1" data-path="lt-gee-requirements.html"><a href="lt-gee-requirements.html#image-collection"><i class="fa fa-check"></i><b>3.1</b> Image Collection</a></li>
Expand Down
Loading

0 comments on commit e49d269

Please sign in to comment.