Comprensión de tileScale en Earth Engine
En muchas funciones de Earth Engine como Image.reduceRegionso Image.sample, hay un argumento llamado tileScale. La documentación de la API generalmente lo interpreta como:
Un factor de escala utilizado para reducir el tamaño de los mosaicos de agregación; el uso de un tileScale más grande (por ejemplo, 2 o 4) puede permitir cálculos que se queden sin memoria con el valor predeterminado.
Si bien esto parece estar bien documentado, todavía no entiendo el efecto de tileScale en el resultado final del cálculo.
- ¿Qué
tileScalehacer? - ¿Se
tileScalefragmenta la imagen antes de realizar el cálculo? - ¿Tiene algún efecto en la escala?
A continuación se muestra una muestra de código para trabajar ( enlace de código ).
// Getting the image of the region of interest
var roi = ee.Geometry.Point([1.864578244475683, 14.492292970253338]);
var image = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
.filterDate('2019-01-01', '2019-01-31')
.filterBounds(roi)
.select(['B5', 'B4', 'B3'])
.toBands()
.rename(['B5', 'B4', 'B3']);
// Checking it out
print(image);
// Define the visualization parameters.
var vizParams = {
bands: ['B5', 'B4', 'B3'],
min: 0,
max: 0.5,
gamma: [0.95, 1.1, 1]
};
// Center the map and display the image.
Map.centerObject(image, 9);
Map.addLayer(image, vizParams, 'false color composite');
// Computing the band means at 30 meters and tileScale of 1: (Computation succeeded)
var control = image.reduceRegion({
reducer:ee.Reducer.mean(),
scale : 30,
tileScale: 1,
maxPixels:1e13
});
print(control, 'first scenario');
// Computing the band means at 5 meters and tileScale of 1: (Computation succeeded)
var scenario2 = image.reduceRegion({
reducer:ee.Reducer.mean(),
scale: 5,
tileScale: 1,
maxPixels: 1e13
});
print(scenario2, 'second scenario');
// Computing the band means at 5 meters and tileScale of 16: (Computation Error: Computation timed out.)
var scenario3 = image.reduceRegion({
reducer:ee.Reducer.mean(),
scale: 5,
tileScale: 16,
maxPixels: 1e13
});
print(scenario3, 'third scenario');
Respuestas
¿Qué hace tileScale? ¿TileScale fragmenta la imagen antes de realizar el cálculo?
Si.
Siempre que realiza una operación como reduceRegion, donde está calculando uno o más valores reducidos de una imagen, los píxeles de la imagen que entran en el reductor se calculan en mosaicos (al igual que los mosaicos utilizados para ver en un mapa), el reductor es aplicados a esos mosaicos de píxeles para producir resultados intermedios, y luego esos resultados intermedios se combinan.
Establecer un valor más alto tileScalereduce el tamaño de esos mosaicos. Esto significa que:
- Cada mosaico utiliza menos memoria (por lo que es menos probable que el cálculo se quede sin memoria).
- Hay más mosaicos, que requieren más tiempo para configurar (por lo que el cálculo llevará más tiempo).
¿Tiene algún efecto en la escala?
Si se refiere a la resolución / tamaño de píxel de la imagen: no. Si el cálculo tiene éxito, el resultado siempre debe ser el mismo independientemente de tileScale(excepto por pequeñas diferencias debido al orden de las operaciones de punto flotante).