Algoritmos do Landsat

Estrutura da coleção do Landsat

O USGS produz dados em três níveis (categorias) para cada satélite:

  • Nível 1 (T1): dados que atendem aos requisitos de qualidade geométrica e radiométrica
  • Nível 2 (T2): dados que não atendem aos requisitos do nível 1
  • Tempo real (RT): dados que ainda não foram avaliados (leva até um mês).

Consulte a documentação do USGS sobre os níveis da coletânea 2 para mais informações.

Para permitir o acesso aos dados T1 validados e aos dados mais recentes em tempo real, agrupamos as cenas em coleções por nível e satélite. Confira alguns exemplos para o Landsat 8:

ID Descrição
LANDSAT/LC08/C02/T1_RT Landsat 8, Coleção 2, Nível 1 + Tempo real
LANDSAT/LC08/C02/T1 Landsat 8, Coleção 2, somente nível 1
LANDSAT/LC08/C02/T2 Landsat 8, Coleção 2, nível 2

As cenas recém-adquiridas são adicionadas à coleção T1_RT diariamente. Quando uma cena de RT é reprocessada e categorizada como T1 ou T2, ela é removida da coleção T1_RT e a nova versão é adicionada às coleções adequadas. Se o seu trabalho for sensível a remoções ou cenas possivelmente registradas incorretamente, talvez seja melhor usar a coleção T1, mas, em geral, é muito raro que qualquer registro incorreto seja grande o suficiente para ser notado em cenas recém-adquiridas.

Cada uma das coleções anteriores contém os dados brutos (ou seja, o brilho no sensor dimensionado). Além disso, para cada coleção que contém imagens T1 ou T2, são oferecidos produtos de TOA (reflexão da atmosfera superior), SR (reflexão da superfície) e LST (temperatura da superfície terrestre). A tabela a seguir descreve o ID de coleta para as coleções TOA e SR/LST usando os dados do Landsat 8 como exemplo.

ID Descrição
LANDSAT/LC08/C02/T1_RT_TOA Landsat 8, Coleção 2, Nível 1 + Tempo real, TOA
LANDSAT/LC08/C02/T1_TOA Landsat 8, Coleção 2, apenas nível 1, TOA
LANDSAT/LC08/C02/T1_L2 Landsat 8, Coleção 2, apenas nível 1, SR e LST
LANDSAT/LC08/C02/T2_TOA Landsat 8, Coleção 2, somente nível 2, TOA

Esses dados existem para os satélites Landsat 4, 5, 7, 8 e 9. Substitua "LC08" nas definições de coleção anteriores por IDs da tabela a seguir para recuperar coleções dos vários satélites.

ID Descrição
LT04 Landsat 4, Mapper temático (TM)
LT05 Landsat 5, Thematic Mapper (TM)
LE07 Landsat 7, Enhanced Thematic Mapper Plus (ETM+)
LC08 Landsat 8, Operational Land Imager (OLI)
LC09 Landsat 9, Operational Land Imager 2 (OLI-2)

Status da coleta do Landsat

Pré-Coleção 1: não é mais produzida nem distribuída pelo USGS, não é compatível com o Earth Engine e será removida do Catálogo de dados em 2024.

Coleção 1: não é mais produzida nem distribuída pelo USGS, não é compatível com o Earth Engine e será removida do Data Catalog em 2024. Use o guia de migração para atualizar os scripts, módulos e apps do Earth Engine para a Coleção 2 até 1º de julho de 2024 e evitar falhas nas solicitações.

Coleção 2: coleção atual produzida pelo USGS. Disponibilidade total no Catálogo de dados do Earth Engine.

Métodos de processamento do Landsat

O Earth Engine contém vários métodos de processamento específicos do Landsat. Especificamente, há métodos para calcular a radiância no sensor, a refletância da atmosfera superior (TOA, na sigla em inglês), a refletância da superfície (SR, na sigla em inglês), a pontuação de nuvens e os compostos sem nuvens.

Brilho no sensor e refletância TOA

As cenas "brutas" no Earth Engine contêm imagens com números digitais (DNs) que representam radiância dimensionada. A conversão de DNs para radiância no sensor é uma transformação linear que usa coeficientes armazenados nos metadados da cena (Chander et al. 2009). O método ee.Algorithms.Landsat.calibratedRadiance() realiza essa conversão. A conversão para reflectância (ou no sensor) de TOA é uma transformação linear que considera a elevação solar e a distância variável sazonal entre a Terra e o Sol. A conversão de TOA é processada pelo método ee.Algorithms.Landsat.TOA(). O método TOA converte as faixas térmicas em temperatura de brilho. Consulte Chander et al. (2009) (ou este site do USGS para o Landsat 8) para mais informações sobre como calcular a refletância da TOA ou a temperatura de brilho. O exemplo a seguir mostra a conversão de dados brutos para radiância e refletância TOA de uma imagem Landsat 8:

// Load a raw Landsat scene and display it.
var raw = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318');
Map.centerObject(raw, 10);
Map.addLayer(raw, {bands: ['B4', 'B3', 'B2'], min: 6000, max: 12000}, 'raw');

// Convert the raw data to radiance.
var radiance = ee.Algorithms.Landsat.calibratedRadiance(raw);
Map.addLayer(radiance, {bands: ['B4', 'B3', 'B2'], max: 90}, 'radiance');

// Convert the raw data to top-of-atmosphere reflectance.
var toa = ee.Algorithms.Landsat.TOA(raw);

Map.addLayer(toa, {bands: ['B4', 'B3', 'B2'], max: 0.2}, 'toa reflectance');

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap
# Load a raw Landsat scene and display it.
raw = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318')
m = geemap.Map()
m.center_object(raw, 10)
m.add_layer(
    raw, {'bands': ['B4', 'B3', 'B2'], 'min': 6000, 'max': 12000}, 'raw'
)

# Convert the raw data to radiance.
radiance = ee.Algorithms.Landsat.calibratedRadiance(raw)
m.add_layer(radiance, {'bands': ['B4', 'B3', 'B2'], 'max': 90}, 'radiance')

# Convert the raw data to top-of-atmosphere reflectance.
toa = ee.Algorithms.Landsat.TOA(raw)

m.add_layer(toa, {'bands': ['B4', 'B3', 'B2'], 'max': 0.2}, 'toa reflectance')
m

Reflexão da superfície

Os dados de refletância de superfície (SR) do Landsat estão disponíveis no Earth Engine como uma cópia do arquivo da Coletânea 2, Nível 2 do USGS. Os dados SR do Landsat 4, 5 e 7 são gerados usando o algoritmo LEDAPS, enquanto os dados SR do Landsat 8 e 9 são gerados usando o algoritmo LaSRC. Saiba mais sobre esses algoritmos e as diferenças deles em relação ao USGS.

É possível acessar uma imagem do Landsat 8, nível 2, da Coleção 2 do USGS assim:

var srImage = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20201028');

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap
sr_image = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20201028')

Os conjuntos de dados de refletância de superfície da Coleção 2 do Landsat 4 a 9 são:

var surfaceReflectanceL4 = ee.ImageCollection('LANDSAT/LT04/C02/T1_L2');
var surfaceReflectanceL5 = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2');
var surfaceReflectanceL7 = ee.ImageCollection('LANDSAT/LE07/C02/T1_L2');
var surfaceReflectanceL8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2');
var surfaceReflectanceL9 = ee.ImageCollection('LANDSAT/LC09/C02/T1_L2');

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap
surface_reflectance_l4 = ee.ImageCollection('LANDSAT/LT04/C02/T1_L2')
surface_reflectance_l5 = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2')
surface_reflectance_l7 = ee.ImageCollection('LANDSAT/LE07/C02/T1_L2')
surface_reflectance_l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
surface_reflectance_l9 = ee.ImageCollection('LANDSAT/LC09/C02/T1_L2')

Pontuação simples da nuvem

Para classificar os pixels do Landsat pela nebulosidade relativa, o Earth Engine fornece um algoritmo rudimentar de classificação de nuvens no método ee.Algorithms.Landsat.simpleCloudScore(). Para saber mais sobre a implementação, consulte este script de exemplo do editor de código. O exemplo a seguir usa o algoritmo de pontuação de nuvens para mascarar nuvens em uma imagem Landsat 8:

// Load a cloudy Landsat scene and display it.
var cloudy_scene = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140926');
Map.centerObject(cloudy_scene);
Map.addLayer(cloudy_scene, {bands: ['B4', 'B3', 'B2'], max: 0.4}, 'TOA', false);

// Add a cloud score band.  It is automatically called 'cloud'.
var scored = ee.Algorithms.Landsat.simpleCloudScore(cloudy_scene);

// Create a mask from the cloud score and combine it with the image mask.
var mask = scored.select(['cloud']).lte(20);

// Apply the mask to the image and display the result.
var masked = cloudy_scene.updateMask(mask);
Map.addLayer(masked, {bands: ['B4', 'B3', 'B2'], max: 0.4}, 'masked');

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap
# Load a cloudy Landsat scene and display it.
cloudy_scene = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140926')
m = geemap.Map()
m.center_object(cloudy_scene)
m.add_layer(
    cloudy_scene, {'bands': ['B4', 'B3', 'B2'], 'max': 0.4}, 'TOA', False
)

# Add a cloud score band.  It is automatically called 'cloud'.
scored = ee.Algorithms.Landsat.simpleCloudScore(cloudy_scene)

# Create a mask from the cloud score and combine it with the image mask.
mask = scored.select(['cloud']).lte(20)

# Apply the mask to the image and display the result.
masked = cloudy_scene.updateMask(mask)
m.add_layer(masked, {'bands': ['B4', 'B3', 'B2'], 'max': 0.4}, 'masked')
m

Se você executar esse exemplo no editor de código, tente alternar a visibilidade das camadas de TOA para comparar a diferença entre as imagens mascaradas e não mascaradas. Consulte a seção Layer Manager (em inglês) dos documentos do editor de código para instruções sobre como fazer isso. A entrada para simpleCloudScore() é uma única cena TOA do Landsat. Além disso, simpleCloudScore() adiciona uma banda chamada 'cloud' à imagem de entrada. A faixa de nuvens contém a pontuação de nuvens de 0 (sem nuvens) a 100 (muitas nuvens). O exemplo anterior usa um limite arbitrário (20) na pontuação de nuvens para mascarar pixels nublados. Para aplicar esse algoritmo a um mosaico do Earth Engine de cenas do Landsat, defina a propriedade SENSOR_ID:

// Load a Landsat 8 TOA collection, make 15-day mosaic, set SENSOR_ID property.
var mosaic = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
  .filterDate('2019-06-01', '2019-06-16').mosaic()
  .set('SENSOR_ID', 'OLI_TIRS');

// Cloud score the mosaic and display the result.
var scored_mosaic = ee.Algorithms.Landsat.simpleCloudScore(mosaic);
Map.addLayer(scored_mosaic, {bands: ['B4', 'B3', 'B2'], max: 0.4},
    'TOA mosaic');

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap
# Load a Landsat 8 TOA collection, make 15-day mosaic, set SENSOR_ID property.
mosaic = (
    ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
    .filterDate('2019-06-01', '2019-06-16')
    .mosaic()
    .set('SENSOR_ID', 'OLI_TIRS')
)

# Cloud score the mosaic and display the result.
scored_mosaic = ee.Algorithms.Landsat.simpleCloudScore(mosaic)
m = geemap.Map()
m.add_layer(
    scored_mosaic,
    {'bands': ['B4', 'B3', 'B2'], 'max': 0.4},
    'TOA mosaic',
)
m

SENSOR_ID é uma propriedade de imagens individuais. Quando o Earth Engine cria um mosaico de muitas imagens, ele precisa descartar os metadados de cada imagem, incluindo a propriedade SENSOR_ID. Para atribuir uma pontuação de nuvem a um mosaico, o Earth Engine procura essa propriedade, mas não a encontra, o que resulta em um erro. Defina a propriedade manualmente para evitar isso. Os IDs dos sensores do Landsat 5, 7 e 8(9) são "TM", "ETM" e "OLI_TIRS", respectivamente.

Composto simples

Para criar composições simples do Landsat sem nuvens, o Earth Engine oferece o método ee.Algorithms.Landsat.simpleComposite(). Esse método seleciona um subconjunto de cenas em cada local, converte para refletância TOA, aplica a pontuação simples de nuvens e considera a mediana dos pixels menos nublados. Este exemplo cria um composto simples usando parâmetros padrão e o compara a um composto usando parâmetros personalizados para o limite de pontuação da nuvem e o percentil:

// Load a raw Landsat 5 ImageCollection for a single year.
var collection = ee.ImageCollection('LANDSAT/LT05/C02/T1')
    .filterDate('2010-01-01', '2010-12-31');

// Create a cloud-free composite with default parameters.
var composite = ee.Algorithms.Landsat.simpleComposite(collection);

// Create a cloud-free composite with custom parameters for
// cloud score threshold and percentile.
var customComposite = ee.Algorithms.Landsat.simpleComposite({
  collection: collection,
  percentile: 75,
  cloudScoreRange: 5
});

// Display the composites.
Map.setCenter(-122.3578, 37.7726, 10);
Map.addLayer(composite, {bands: ['B4', 'B3', 'B2'], max: 128}, 'TOA composite');
Map.addLayer(customComposite, {bands: ['B4', 'B3', 'B2'], max: 128},
    'Custom TOA composite');

Consulte a página Ambiente Python para informações sobre a API Python e o uso de geemap para desenvolvimento interativo.

import ee
import geemap.core as geemap
# Load a raw Landsat 5 ImageCollection for a single year.
collection = ee.ImageCollection('LANDSAT/LT05/C02/T1').filterDate(
    '2010-01-01', '2010-12-31'
)

# Create a cloud-free composite with default parameters.
composite = ee.Algorithms.Landsat.simpleComposite(collection)

# Create a cloud-free composite with custom parameters for
# cloud score threshold and percentile.
custom_composite = ee.Algorithms.Landsat.simpleComposite(
    collection=collection, percentile=75, cloudScoreRange=5
)

# Display the composites.
m = geemap.Map()
m.set_center(-122.3578, 37.7726, 10)
m.add_layer(
    composite, {'bands': ['B4', 'B3', 'B2'], 'max': 128}, 'TOA composite'
)
m.add_layer(
    custom_composite,
    {'bands': ['B4', 'B3', 'B2'], 'max': 128},
    'Custom TOA composite',
)
m

A entrada para a composição simples é uma coleção de imagens brutas. Além disso, por padrão, a saída da banda reflexiva é a refletância dimensionada para 8 bits, e a saída da banda térmica é Kelvin menos 100, para caber no intervalo de 8 bits. É possível mudar esse comportamento definindo o parâmetro asFloat como verdadeiro para receber uma saída de ponto flutuante sem escala e sem deslocamento.