Контролируемая классификация только с одним классом с Google Earth Engine - PullRequest
0 голосов
/ 25 ноября 2018

Я новичок в области геопространственного анализа и Google Earth Engine.Я пытаюсь классифицировать только один класс изображений Landsat 5 (бассейн).Я получил несколько учебных площадок и применил классификатор.В результате мое классифицированное изображение оказалось полностью красным (поэтому классификация не дала мне ожидаемых результатов).Это потому, что я должен классифицировать несколько классов, а не только один?И как попросить классифицировать мой определенный класс по моим учебным сайтам и создать другой класс, который собирает все пиксели, которые не принадлежат к ранее определенному классу?Ниже код, который я использовал:

var bands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7']

var image= ee.Image('LANDSAT/LT05/C01/T1_TOA/LT05_015036_20111025')
      .select(bands)

// Train is the feature collection containing my training sites (points)
var training = image.sampleRegions({
               collection: train,
               properties: ['class'],
               scale: 30
               });

var trained = ee.Classifier.cart().train(training, 'class', bands);

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

1 Ответ

0 голосов
/ 05 декабря 2018

Как и сказал @Val, вам понадобится как минимум два класса.Это означает, что вам придется либо принести набор данных, который является классом «все остальное», либо вы можете создать набор псевдо-случайных данных в Earth Engine.Выборка псевдо-непоследовательности предполагает, что у вас есть идеальная выборка вхождения первого класса, потому что она выберет области, которые не находятся рядом с первой выборкой, для создания другой выборки (если это вообще имеет смысл ...).Это может выглядеть примерно так в коде:

var bands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7']

var image= ee.Image('LANDSAT/LT05/C01/T1_TOA/LT05_015036_20111025')
  .select(bands)

// Train is the feature collection containing my training sites (points)
var occurrence = image.sampleRegions({
           collection: train,
           properties: ['class'],
           scale: 30
           }).map(function(feature){
               return feature.set('class',ee.Number(1))
           });

// Create geometry where there is no occurrence data
var nonarea = image.geometry().difference(train.buffer(100))

// Sample from region where there is no occurrence data
var nonoccurrence = image.sample({
           region: nonarea,
           scale: 30
           }).map(function(feature){
               return feature.set('class',ee.Number(0))
           });

// Merge the occurrence and non-occurrence feature collections
var training = ee.FeatureCollection(occurrence.merge(nonoccurrence))

var trained = ee.Classifier.cart().train(training, 'class', bands);

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

(Возможно, вам придется исправить некоторые типы данных в приведенном выше коде, было сложно протестировать без примеров данных ...).Это широко используемый подход к моделированию распространения видов и опасности бедствий, и, надеюсь, он будет полезен для вашего случая использования!

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