Estatísticas de bairros de imagens

Em vez de especificar uma região para realizar uma redução, também é possível especificar um bairro para aplicar um redutor. Para reduzir as vizinhanças de imagens, use image.reduceNeighborhood(). Nesse caso, a redução vai ocorrer em uma janela deslizante sobre a imagem de entrada, com o tamanho e a forma da janela especificados por um ee.Kernel. A saída de reduceNeighborhood() será outra imagem, com cada valor de pixel representando a saída da redução em uma vizinhança ao redor desse pixel na imagem de entrada. A Figura 1 ilustra esse tipo de redução.

Diagrama de redução de vizinhança
Figura 1. Ilustração de reduceNeighborhood(), em que o redutor é aplicado em um kernel.

Por exemplo, considere usar imagens do Programa de Imagens de Agricultura Nacional (NAIP, na sigla em inglês) para quantificar as diferenças de paisagem resultantes da extração de madeira nas florestas de sequoia da Califórnia. Especificamente, use a variação padrão (SD, na sigla em inglês) em uma vizinhança para representar a diferença na textura entre a área registrada (SW da imagem na Figura 2) e a área protegida (NE da imagem na Figura 2). Por exemplo, para conseguir a textura de uma imagem de índice de vegetação por diferença normalizada (NDVI, na sigla em inglês) do NAIP, use reduceNeighborhood() para calcular o desvio padrão em uma vizinhança definida por um kernel:

Editor de código (JavaScript)

// Define a region in the redwood forest.
var redwoods = ee.Geometry.Rectangle(-124.0665, 41.0739, -123.934, 41.2029);

// Load input NAIP imagery and build a mosaic.
var naipCollection = ee.ImageCollection('USDA/NAIP/DOQQ')
  .filterBounds(redwoods)
  .filterDate('2012-01-01', '2012-12-31');
var naip = naipCollection.mosaic();

// Compute NDVI from the NAIP imagery.
var naipNDVI = naip.normalizedDifference(['N', 'R']);

// Compute standard deviation (SD) as texture of the NDVI.
var texture = naipNDVI.reduceNeighborhood({
  reducer: ee.Reducer.stdDev(),
  kernel: ee.Kernel.circle(7),
});

// Display the results.
Map.centerObject(redwoods, 12);
Map.addLayer(naip, {}, 'NAIP input imagery');
Map.addLayer(naipNDVI, {min: -1, max: 1, palette: ['FF0000', '00FF00']}, 'NDVI');
Map.addLayer(texture, {min: 0, max: 0.3}, 'SD of NDVI');

Configuração do Python

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

Colab (Python)

# Define a region in the redwood forest.
redwoods = ee.Geometry.Rectangle(-124.0665, 41.0739, -123.934, 41.2029)

# Load input NAIP imagery and build a mosaic.
naip_collection = (
    ee.ImageCollection('USDA/NAIP/DOQQ')
    .filterBounds(redwoods)
    .filterDate('2012-01-01', '2012-12-31')
)
naip = naip_collection.mosaic()

# Compute NDVI from the NAIP imagery.
naip_ndvi = naip.normalizedDifference(['N', 'R'])

# Compute standard deviation (SD) as texture of the NDVI.
texture = naip_ndvi.reduceNeighborhood(
    reducer=ee.Reducer.stdDev(), kernel=ee.Kernel.circle(7)
)

# Display the results.
m = geemap.Map()
m.center_object(redwoods, 12)
m.add_layer(naip, {}, 'NAIP input imagery')
m.add_layer(
    naip_ndvi, {'min': -1, 'max': 1, 'palette': ['FF0000', '00FF00']}, 'NDVI'
)
m.add_layer(texture, {'min': 0, 'max': 0.3}, 'SD of NDVI')
m

Qualquer pixel com um valor de kernel diferente de zero é incluído na computação. Os pesos do kernel são usados por padrão, mas é possível mudar esse comportamento com o argumento inputWeight. A imagem de entrada e a saída de reduceNeighborhood() são comparadas na Figura 2.

reduzir a entrada de vizinhança
Figura 2a. Imagens do NAIP da costa da Califórnia do Norte.
reduzir a saída de vizinhança
Figura 2b. Saída reduceNeighborhood() usando um redutor de desvio padrão.