Texture

Earth Engine propose plusieurs méthodes spéciales pour estimer la texture spatiale. Lorsque l'image est à valeurs discrètes (et non à virgule flottante), vous pouvez utiliser image.entropy() pour calculer l'entropie dans un voisinage:

Éditeur de code (JavaScript)

// Load a high-resolution NAIP image.
var image = ee.Image('USDA/NAIP/DOQQ/m_3712213_sw_10_1_20140613');

// Zoom to San Francisco, display.
Map.setCenter(-122.466123, 37.769833, 17);
Map.addLayer(image, {max: 255}, 'image');

// Get the NIR band.
var nir = image.select('N');

// Define a neighborhood with a kernel.
var square = ee.Kernel.square({radius: 4});

// Compute entropy and display.
var entropy = nir.entropy(square);
Map.addLayer(entropy,
             {min: 1, max: 5, palette: ['0000CC', 'CC0000']},
             'entropy');

Notez que la bande NIR est mise à l'échelle sur 8 bits avant d'appeler entropy(), car le calcul de l'entropie prend des entrées à valeurs discrètes. Les éléments non nuls du noyau spécifient le voisinage.

Une autre façon de mesurer la texture consiste à utiliser une matrice de cooccurrence des niveaux de gris (GLCM, gray-level co-occurrence matrix). À l'aide de l'image et du noyau de l'exemple précédent, calculez le contraste basé sur le GLCM comme suit:

Éditeur de code (JavaScript)

// Compute the gray-level co-occurrence matrix (GLCM), get contrast.
var glcm = nir.glcmTexture({size: 4});
var contrast = glcm.select('N_contrast');
Map.addLayer(contrast,
             {min: 0, max: 1500, palette: ['0000CC', 'CC0000']},
             'contrast');

De nombreuses mesures de texture sont générées par image.glcm(). Pour obtenir une référence complète sur les sorties, consultez Haralick et al. (1973) et Conners et al. (1984).

Les mesures locales d'association spatiale telles que le C de Geary (Anselin, 1995) peuvent être calculées dans Earth Engine à l'aide de image.neighborhoodToBands(). En utilisant l'image de l'exemple précédent:

Éditeur de code (JavaScript)

// Create a list of weights for a 9x9 kernel.
var row = [1, 1, 1, 1, 1, 1, 1, 1, 1];
// The center of the kernel is zero.
var centerRow = [1, 1, 1, 1, 0, 1, 1, 1, 1];
// Assemble a list of lists: the 9x9 kernel weights as a 2-D matrix.
var rows = [row, row, row, row, centerRow, row, row, row, row];
// Create the kernel from the weights.
// Non-zero weights represent the spatial neighborhood.
var kernel = ee.Kernel.fixed(9, 9, rows, -4, -4, false);

// Convert the neighborhood into multiple bands.
var neighs = nir.neighborhoodToBands(kernel);

// Compute local Geary's C, a measure of spatial association.
var gearys = nir.subtract(neighs).pow(2).reduce(ee.Reducer.sum())
             .divide(Math.pow(9, 2));
Map.addLayer(gearys,
             {min: 20, max: 2500, palette: ['0000CC', 'CC0000']},
             "Geary's C");

Pour obtenir un exemple d'utilisation de l'écart type de voisinage pour calculer la texture de l'image, consultez la page Statistiques sur les voisinages d'images.