Image Collections

Now we are getting to the heart of what makes Earth Engine powerful. ImageCollections are stacks of images organized by time and space. They let us filter by date, location, and metadata, then map functions or reduce to composites that we can analyze.

Learning objectives

  • Load an ImageCollection by ID.
  • Filter by date, bounds, and metadata (cloud cover).
  • Extract a single image and build a simple composite.
  • Inspect collections without overwhelming the console.

Why it matters

Most analyses start with an ImageCollection. Filtering and compositing correctly saves time, reduces cloud contamination, and keeps scripts efficient.

Quick win: filter, inspect, composite

// Load Landsat 8 SR and filter
var col = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  .filterBounds(ee.Geometry.Point([-82.3, 29.6]))
  .filterDate('2023-06-01', '2023-07-01')
  .filter(ee.Filter.lt('CLOUD_COVER', 20));

print('Count after filters', col.size());
var first = col.first();
Map.centerObject(first, 9);
Map.addLayer(first, {bands: ['SR_B4', 'SR_B3', 'SR_B2'], min: 0.02, max: 0.3}, 'First image');

// Median composite to reduce clouds
var median = col.median();
Map.addLayer(median, {bands: ['SR_B4', 'SR_B3', 'SR_B2'], min: 0.02, max: 0.3}, 'Median composite');

What we should see

A single scene and a cleaner median composite; console showing a small collection count.

Key concepts

  • filterDate(): time window.
  • filterBounds(): spatial filter.
  • filter(): metadata filters (for example, CLOUD_COVER).
  • first(): grab one image for debugging.
  • median() / mean(): simple cloud-resistant composites.

Try it: refine your stack

Add .sort('CLOUD_COVER') and view the first image.

Print col.aggregate_histogram('CLOUD_COVER') to see quality distribution.

Swap to Sentinel-2 SR and adjust band names accordingly.

Common mistakes

  • Printing huge collections before filtering-filter first, then inspect.
  • Forgetting to scale/offset surface reflectance products before visualization.
  • Using first() on an unfiltered collection and getting a cloudy scene.

Quick self-check

  1. What does filterBounds() do?
  2. Why use median() on a collection?
  3. How would you remove images with EO:cloud_cover greater than 10?

Next steps

  • Apply cloud masking to each image with .map() before compositing.
  • Export a median composite at a specified scale (see Week 04 exports).
  • Explore other collections in the Data Catalog.

Going Deeper: EEFA Book

This module gives us the foundation. To explore further, see Chapter F3.0 (Image Collections) and F4.0 (Compositing) in the Cloud-Based Remote Sensing with Google Earth Engine (EEFA Book).