Portfolio Entry III — November 13, 2020

Do tree cover analyses differ when using satellite imagery from Landsat-8 compared to Sentinel-2?

Using independent validation points gathered through CollectEarth, we compare our tree cover classifications from composite, cloudless Landsat-8 and Sentinel-2 imagery from 2019 and 2020 in western Rwanda. From this analysis, we are able to parse apart the classification differences when using the 30m pixels from Landsat-8, compared to the 10m pixels from Sentinel-2.

Mapping tree cover using imagery from different satellites

In western Rwanda, the best time for mapping tree cover is between June and September. This time of year has little rain and ostensibly less cloud cover with minimal rainfall. As global climate patterns shift due to climate change, it will be important to monitor changing rainfall patterns across the region and shifts in this window of the dry season. By using composite images from 2019 and 2020 for the tree classification (since there were some gaps in 2019 for Sentinel-2), these composite images do not necessarily provide a clear snapshot in time of tree cover (Fig. 1). 

Creating land cover validation points

I used a modified list of land classes as provided from the CollectEarth survey from the World Resources Institute. From the given list, I created training points for “forest,” “cropland,” “grassland,” “settlement,” and “barren,” incorporating an additional class for “water” and excluding “wetland” and “brushland/shrubland.” Since a large portion of my study region is covered in lakes and rivers, I wanted to ensure that water was not confused with another land class. I excluded “wetland” and “brushland” because they were visually similar to the “grassland” class. Since this analysis was to isolate tree cover, it was not as pertinent to distinguish non-tree classes from one another.

The Mapathon dataset provided a truly independent set of data points to assess the land classification map and created a more accurate confusion matrix. The main disadvantage of the Mapathon data is that CollectEarth required a complex survey to collect validation points. It is possible that some data entry may be incorrect from the non-standardized questions, obscuring the validity of the reference points. Since our analysis was only looking at tree coverage in 2019, our validation points could have just assessed “trees” or “no trees” in only 2018 (most recent image) (Fig. 2).

Comparing our analyses

The Sentinel-2 classification is slightly more specific than Landsat-8 with respect to tree cover on basemap satellite images (Fig. 3). The overall accuracy is rather high (S2=74.3%;  L8=72.9%) while the kappa coefficient is low (<0.4 for both) because the classification and reference points agreed that many sampled pixels were not trees. This much broader category (including cropland, grassland, water, barren, and settlement) includes points likely validated by chance, not just points of agreement that a sampled pixel is a tree (Fig. 4). This is further reflected in the error of omission for both satellites, where the “real” tree cover was not included in the classified image of the map (7/19 pixels for both, 37%) compared to non-trees (11/51 pixels in Sentinel-2, 22%; or 12/51 pixels in Landsat-8, 24%). Similarly, the error of commission for both satellites was high for tree classification (50%), where a relatively high number of tree pixels were assigned to the wrong class (Fig. 4). This classification accuracy could likely be changed by assessing multiple land cover classes along with a larger sample of validation points. By looking solely at tree cover, this analysis only displays that more pixels were assigned to trees than there should have been, not the nuanced inaccuracies within this land cover analysis. Despite these differences, both satellites had nearly equivalent confusion matrices, meaning that satellite pixel resolution has less of an influence on land classification than might be expected.


To access code for images: https://code.earthengine.google.com/d8a3238b4f305ae1c67d7d363ce1e383

To access functions contributing to code: https://code.earthengine.google.com/4f4bd744d9ec10d1e2157385ef21a7ce