Как извлечь пиксели с указанным значением c в Google Earth Engine? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь извлечь пиксели со значением 2, в данном случае это пиксели воды из классифицированных результатов. До сих пор я нашел только функцию .lt, которая дает только 0 или 1, в зависимости от того, меньше ли пиксели значение в аргументе, что затем можно использовать для маскировки неводных пикселей (пикселей со значением 0 и 1) получить водные. Однако я попробовал это безуспешно. Где я go ошибся?

Кроме того, есть ли способ непосредственно извлекать пиксели со значением 2 без необходимости go проходить через все трудности маскировки неводных пикселей, чтобы получить водяные пиксели?

Большое спасибо.

// Make a cloud-free Landsat 8 TOA composite (from raw imagery).
var l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1');

var image = ee.Algorithms.Landsat.simpleComposite({
  collection: l8.filterDate('2018-01-01', '2018-12-31'),
  asFloat: true
});

// Use these bands for prediction.
var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'B11'];

// Load training points. The numeric property 'class' stores known labels.
var points = ee.FeatureCollection('GOOGLE/EE/DEMOS/demo_landcover_labels');

// This property stores the land cover labels as consecutive
// integers starting from zero.
var label = 'landcover';

// Overlay the points on the imagery to get training.
var training = image.select(bands).sampleRegions({
  collection: points,
  properties: [label],
  scale: 30
});

// Train a CART classifier with default parameters.
var trained = ee.Classifier.smileCart().train(training, label, bands);

// Classify the image with the same bands used for training.
var classified = image.select(bands).classify(trained);


var random = classified.lte(1);
//extracting out pixels less than or equals to 1, i.e. not water
var notWater = classified.updateMask(random);

// Display the inputs and the results.
Map.centerObject(points, 11);
Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], max: 0.4}, 'image');
Map.addLayer(notWater,
             {},
             'not water');
Map.addLayer(classified,
             {min: 0, max: 2, palette: ['red', 'green', 'blue']},
             'classification');
Map.addLayer(random,
             {},
             'random');
Map.addLayer(classified.updateMask(random),
             {},'classified masked with random');

// to display only water pixels 
Map.addLayer(classified.updateMask(notWater),
             {},
             'classified masked with not water');

1 Ответ

0 голосов
/ 30 апреля 2020

Я не совсем понимаю ваш вопрос, но вы можете использовать .eq для извлечения пикселей с определенным значением.

var water = classified.eq(2);

Если вы хотите, чтобы эти значения были 2 вместо 1, вы могли бы делать

var water = ee.Image().where(classified.eq(2), 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...