Statystyki sąsiedztwa obrazów

Zamiast określać region, w którym ma być wykonywane zmniejszanie, możesz też wskazać sąsiedztwo, w którym ma być stosowany reduktor. Aby zmniejszyć sąsiedztwo obrazu, użyj opcji image.reduceNeighborhood(). W takim przypadku redukcja zostanie przeprowadzona w ślizgającym oknie na obrazie wejściowym, a jej rozmiar i kształt zostaną określone przez ee.Kernel. Wyjście funkcji reduceNeighborhood() to inny obraz, w którym każda wartość piksela reprezentuje wynik redukcji w sąsiedztwie tego piksela na obrazie wejściowym. Rysunek 1 przedstawia tego typu redukcję.

reduceNeighborhood diagram
Rysunek 1. Ilustracja funkcji reduceNeighborhood(), w której reduktor jest stosowany w jądrze.

Możesz na przykład użyć zdjęć z National Agriculture Imagery Program (NAIP), aby określić różnice w krajobrazie wynikające z pozyskiwania drewna w kalifornijskich lasach sekwoi. W szczególności użyj odchylenia standardowego (SD) w sąsiedztwie, aby przedstawić różnicę w teksturze między zarejestrowanym obszarem (SW obrazu na rysunku 2) a obszarem chronionym (NE obrazu na rysunku 2). Aby na przykład uzyskać teksturę obrazu znormalizowanego różnicowego wskaźnika wegetacji (NDVI), użyj funkcji reduceNeighborhood() do obliczenia SD w sąsiedztwie zdefiniowanym przez kernel:

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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

W obliczeniach uwzględniany jest każdy piksel o wartości jądra innej niż 0. Domyślnie używane są wagi jądra, ale możesz zmienić to zachowanie za pomocą argumentu inputWeight. Obraz wejściowy i reduceNeighborhood() wyjściowy są porównane na rysunku 2.

reduceNeighborhood
Ilustracja 2a. Zdjęcia NAIP wybrzeża Kalifornii Północnej.
reduceNeighborhood
Rysunek 2b. reduceNeighborhood() za pomocą standardowego reduktora odchylenia standardowego.