Problem z obrazami Sentinel 1 w Google Earth Engine

Oct 04 2020

Próbuję zastosować algorytm Otsu do obrazów S1, począwszy od jego uruchomienia do dnia dzisiejszego na moim obszarze badań w celu mapowania wód. Otsu wykonuję bez stosowania filtru daty dla przepustki satelitarnej, więc mogę uzyskać więcej obrazów. Ale pojawia się błąd

ImageCollection (błąd) Błąd w mapie (ID = S1A_IW_GRDH_1SSV_20160525T235440_20160525T235507_011422_011607_60C4): Dictionary.get: Dictionary nie zawiera klucza: bucketMeans.

Następnie próbowałem pominąć powyższy błąd, stosując

.filter(ee.Filter.neq('system:id', 'COPERNICUS/S1_GRD/S1A_IW_GRDH_1SSV_20160525T235440_20160525T235507_011422_011607_60C4'))

i znowu pojawia się błąd

ImageCollection (błąd) Błąd w mapie (ID = S1A_IW_GRDH_1SSV_20160805T235445_20160805T235511_012472_0137E8_08F2): Dictionary.get: Dictionary nie zawiera klucza: bucketMeans.

i stosuję inny filtr

.filter(ee.Filter.neq('system:id','COPERNICUS/S1_GRD/S1A_IW_GRDH_1SSV_20160805T235445_20160805T235511_012472_0137E8_08F2'))

Ale nic nie działa, po prostu trwa. Zrozumiałem, że problem występuje tylko na zejściach. Więc kiedy umieściłem filtr, aby uzyskać przejście rosnąco, postęp wyjściowy bez żadnych błędów, ale nie zastosuje tego samego w przebiegu malejącym.

Oto mój kod ...

Odpowiedzi

5 Nick Oct 07 2020 at 00:51

Problem polega na tym, że niektóre obrazy S1 w Twojej kolekcji są całkowicie zamaskowane po przycięciu do geometrii obszaru nauki. Aby to naprawić, odfiltruj te obrazy po utworzeniu oryginalnej kolekcji obrazów (na podstawie tego postu ):

var s1Collection = s1Collection.map(function(img){
  // unmask each image in the collection
  var unmasked = img.unmask(-99).eq(-99);
  // reduce histogram on each image and set the keys as properties (key '1' will be masked pixels)
  var rR = unmasked.reduceRegion({reducer: ee.Reducer.frequencyHistogram(),
                               geometry: img.geometry(),
                               scale: 100,
                               bestEffort: true});
  var newProperties = ee.Dictionary(rR.get('VV'));
  return img.set(newProperties)
  
})
var s1Collection = ee.ImageCollection(s1Collection).filter(ee.Filter.notNull(['0']))
print(s1Collection, 'Clean S1 Collection');

Dłuższe wyjaśnienie

Analizując obraz uzyskany 25.05.2016 (z twojego przykładu), ślad obrazu nieznacznie zachodzi na twój obszar badania i dlatego nie jest wykluczony, gdy to zrobisz .filterBounds(Jinjiram). Ale jak widać poniżej nie ma danych w Jinjiramobszarze, więc po obcięciu cały obraz jest zamaskowany:

Z tego powodu słownik histogramu ma wartości null, ponieważ nie ma danych do podsumowania. Zobacz różnicę poniżej: