Comprensione tileScale in Earth Engine
In molte funzioni di Earth Engine come Image.reduceRegionso Image.sample, c'è un argomento chiamato tileScale. La documentazione API generalmente lo interpreta come:
Un fattore di scala utilizzato per ridurre le dimensioni delle tessere di aggregazione; l'utilizzo di un tileScale più grande (ad esempio 2 o 4) può consentire calcoli che esauriscono la memoria con l'impostazione predefinita.
Anche se questo sembra essere ben documentato, ancora non capisco l'effetto di tileScale sul risultato finale del calcolo.
- Cosa fa
tileScale? - L'
tileScaleimmagine in pezzi prima di eseguire il calcolo? - Ha un effetto sulla scala?
Di seguito è riportato un esempio di codice con cui lavorare ( collegamento al codice ).
// 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');
Risposte
Cosa fa tileScale? TileScale divide in pezzi l'immagine prima di eseguire il calcolo?
Sì.
Ogni volta che si esegue un'operazione come reduceRegion, in cui si calcola uno o più valori ridotti da un'immagine, i pixel dell'immagine che entrano nel riduttore vengono calcolati in tessere (proprio come le tessere utilizzate per la visualizzazione su una mappa), il riduttore è applicato a quelle tessere di pixel per produrre risultati intermedi, quindi quei risultati intermedi vengono combinati insieme.
L'impostazione di un valore più alto tileScaleriduce le dimensioni di quelle tessere. Ciò significa che:
- Meno memoria viene utilizzata da ogni tessera (quindi è meno probabile che il calcolo esaurisca la memoria).
- Ci sono più tessere, che richiedono più tempo per essere impostate (quindi il calcolo richiederà più tempo).
Ha un effetto sulla scala?
Se intendi la risoluzione / dimensione in pixel dell'immagine: no. Se il calcolo ha esito positivo, il risultato dovrebbe essere sempre lo stesso indipendentemente da tileScale(eccetto per piccole differenze dovute all'ordine delle operazioni in virgola mobile).