Извлечение значений пикселей из коллекции изображений для создания композита в Google Earth Engine - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать безоблачную композицию landat в Google Earth Engine в области с большим количеством облаков (индонезийский облачный лес).Ранее я успешно справлялся с этим, создавая самый зеленый пиксельный композит, в котором я использовал пиксель с наибольшим значением NDVI, чтобы убедиться, что я использовал не облачные пиксели в своем композитном изображении.

//Filter landsat 8 image collection by date, area
var collection = landsat
.filterBounds(bounds)
.filterDate(2016-08-01, 2016-10-31);

// Sort from least to most cloudy and get first (least cloudy) image
var sorted = collection.sort('CLOUD_COVER');
var image = ee.Image(sorted.first());

//Function to get NDVI 
var addNDVI = function(image) {
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
return image.addBands(ndvi);
};

//Add NDVI bands to image collection
var withNDVI = landsat.map(addNDVI);

// Make a "greenest" pixel composite using NDVI
var greenest = withNDVI.qualityMosaic('NDVI');
Map.addLayer(greenest, {bands: ['B4', 'B3', 'B2'], max: 0.15}, 'greenest');

Код работает нормально, однако меня беспокоит использование пикселей с наибольшим NDVI для того, чтобы компоновка представляла собой покрытую лесом область.Поэтому я ищу способ извлечь пиксели с самым высоким NDVI (чтобы избавиться от облаков), а затем использовать все 7 других полос этого пикселя в моем композите (вместо использования самой полосы NDVI).Мои вопросы: избавит ли это от чрезмерного представительства в лесу или у меня все еще будет та же проблема?Во-вторых, если этот метод кажется законным способом избавиться от облаков при создании композита, который не представляет чрезмерно лес, как я могу извлечь пиксели с высоким NDVI, а затем использовать их другие полосы для создания композита?

1 Ответ

0 голосов
/ 02 ноября 2018

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

var bounds = /* color: #d63000 */ee.Geometry.Polygon(
    [[[94.93602603806119, -12.072520735360198],
      [141.8696197880612, -13.187431968041206],
      [142.3969635380612, 6.019400576838261],
      [94.67235416306119, 6.456250813337956]]]),
    landsat = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT_TOA");

//Filter landsat 8 image collection by date, area
var collection = landsat
 .filterBounds(bounds)
 .filterDate('2016-08-01', '2016-10-31');

//Function to get Inverse Cloud Score
var addCloud = function(image) {
var cloudImg = ee.Algorithms.Landsat.simpleCloudScore(image);
var clouds = cloudImg.select('cloud');
var inverseClouds = ee.Image(100).subtract(clouds).rename('inverse_cloud');
return image.addBands(inverseClouds);
};

//Add cloud bands to image collection
var withCloudBand = landsat.map(addCloud);

// Option 1: Median composite after masking clouds
var noCloudsMedian = withCloudBand.map(function(img){
  return img.updateMask(img.select('inverse_cloud').gt(90));
}).median();
Map.addLayer(noCloudsMedian, {bands: ['B4', 'B3', 'B2'], max: 0.30}, 'Option 1');

// Option 2: Quality mosaic based on least cloudy pixel
var noCloudQualityMosaic = withCloudBand.qualityMosaic('inverse_cloud');
Map.addLayer(noCloudQualityMosaic, {bands: ['B4', 'B3', 'B2'], max: 0.30}, 'Option 2');

Вот ссылка на код для просмотра результатов:https://code.earthengine.google.com/7ea8e59b5c72340c6d784d850db856f4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...