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.