Попытка отфильтровать изображения на страже 2 по процентам - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь отфильтровать изображения Sentinel 2 по проценту облачного покрова (скажем, 20%), а затем выполнить некоторую арифметику изображений на выходе.

Я пытаюсь реализовать то, что найдено здесь: поток gis.stackexchange (https://gis.stackexchange.com/questions/303344/filter-landsat-images-cloud-cover). К сожалению, функция ee.Algorithms.Landsat... не работает с изображениями Sentinel 2, что требуется для того, что я делаю.

Мой код ниже.

var myCollection = ee.ImageCollection('COPERNICUS/S2');

var dataset2 = ee.ImageCollection(
  myCollection.filterBounds(point) //use only one image that contains the POI
  .filterDate('2015-06-23', '2019-04-25') //filter by date range
);


var ds2_cloudiness = dataset2.map(function(image){
  var cloud = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud');
  var cloudiness = cloud.reduceRegion({
    reducer: 'median'
  });
  return image.set(cloudiness);
});

var filteredCollection = ds2_cloudiness.filter(ee.Filter.lt('cloud', 20));

Map.addLayer(filteredCollection, {min: -.2, max:.2}, 'test')

Это выводит ошибку: Landsat.simpleCloudScore: Image is not a Landsat scene or is missing SENSOR_ID metadata. Любой толчок в правильном направлении будет оценен.

1 Ответ

0 голосов
/ 27 апреля 2019

Я думаю, что есть более простой подход, если вы просто хотите фильтровать, используя процент облачного покрова.Вы можете сделать это путем фильтрации на основе метаданных изображения.

var myCollection = ee.ImageCollection('COPERNICUS/S2');
print(myCollection.first())

Если вы осмотрите первое изображение в коллекции изображений Sentinel-2, вы фактически сможете увидеть его метаданные (только для этого изображения).Поскольку вы работаете с однородной и ухоженной коллекцией изображений, вы можете ожидать, что другие изображения будут иметь аналогичные характеристики.Отсюда вы можете сделать следующее

myCollection = myCollection.filter(ee.Filter.lte('CLOUDY_PIXEL_PERCENTAGE',20));
print(myCollection.first());

Этот конкретный код отфильтрует коллекцию изображений, чтобы найти изображения с облачным покровом, меньшим или равным 20. Вы можете проверить это, либо еще раз проверив первое изображениеили проверка размера коллекции, которая должна была сузиться.

Однако, если вы ищете отдельный алгоритм для вычисления облака по изображению, вам, вероятно, придется написать его для Sentinel (пока).

...