Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
В своем коде контролируемой классификации я разделил его на следующие этапы:
Вышеупомянутые шаги в основном являются стандартными для контролируемой классификации. Их можно изменить в соответствии с вашими потребностями, но обычно никаких изменений не происходит.
Обычно существует два метода построения выборочных данных: один — загрузить данные векторного обучения локально, другой — выбрать точки и создать их самостоятельно в GEE. Я в основном представляю второй метод.
Чтобы построить выборочные данные, сначала создайте новый слой, затем выберите объект и отметьте его на карте.
После выбора точек отбора проб не забудьте открыть объект, изменить тип слоя на коллекцию объектов и добавить атрибуты классификации: растительный покров и ценность. Например, значение точки отбора проб обрабатываемой земли равно 1.
Этот шаг выбирается в соответствии с вашими потребностями. Окупаемость в моем коде — это область исследования. Если вы обнаружите, что в исследуемой области много облаков изображений, вы можете настроить стандарт фильтрации облаков на более высокий уровень.
var startDate = ee.Date('2018-04-01');
var endDate = ee.Date('2018-9-30');
var collection = l8
.filterDate(startDate, endDate)//Фильтрация времени
.filterBounds(roi)//Фильтрация позиций
.filter(ee.Filter.lte('CLOUD_COVER',20))//Облачная фильтрация
;
Первый шаг — создать функцию удаления облаков и инкапсулировать ее, чтобы вы могли вызвать ее в любое время.
var remove_cloud=function(collection)
{
// Рассчитайте облачную составляющую каждого пикселя и определите функцию fun_calCloudScore.
var fun_calCloudScore = function(image) {
return ee.Algorithms.Landsat.simpleCloudScore(ee.Image(image));//simpleCloudScore вычисляет индекс облачности каждого пикселя данных TOA
};
//Определяем набор данных и функцию, которая будет использоваться для операций с функциями
var calCloudScore = ee.ImageCollection(collection)
.map(fun_calCloudScore)
;
//Маскируем пиксели с порогом, превышающим 10
var fun_maskCloud = function(image) {
var mask = image.select(['cloud']).lte(10);//данные TOA рассчитываются с помощью simpleCloudScore для создания атрибута "cloud", а пиксели с "cloud" меньше 10 сохраняются
// показать облака показать маски облаков
return image.updateMask(маска);//Обновить
};
//Определяем набор данных и функцию, которая будет использоваться для операций с функциями
var maskCloud = ee.ImageCollection(calCloudScore)
.map(fun_maskCloud)
;
var maskCloud2=maskCloud.mean()
print('maskCloud2',maskCloud2 )
Map.addLayer(maskCloud,visualParam, 'maskCloud', false);//Отображать маску Облако, отфильтрованную по чистым пикселям
Map.addLayer(maskCloud2,visualParam, 'maskCloud2', false);//Отображать маску Облако, отфильтрованную по чистым пикселям
return maskCloud;
}
Следующее предложение касается мозаики и обрезки:
var image=remove_cloud(collection).mosaic().clip(roi);
Этот шаг основан на требованиях каждого. В моей системе классификации есть вода, поэтому строится mndwi, потому что есть здания, строится ndbi, потому что есть растительность, строится NDVI; Конечно, этот шаг не является обязательным.
var mndwi = image.normalizedDifference(['B3', 'B6']).rename('MNDWI');//Рассчитать MNDWI
var ndbi = image.normalizedDifference(['B6', 'B5']).rename('NDBI');//Рассчитать NDBI
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');//Рассчитать NDVI
Следует отметить, что вы вычислили эти индексы, но все они представляют собой отдельные изображения. Вам нужно рассматривать их как полосу мета-изображения, поэтому вам нужно добавить их в свое изображение:
image=image
.addBands(ndvi)
.addBands(ndbi)
.addBands(mndwi)
Во-первых, все выборочные данные необходимо объединить в одни данные, то есть все они являются обучающими данными. Теперь нам нужно построить функции каждой категории, и эти функции включают в себя значения каждого канала и индекса, поэтому требуется процесс выбора канала. Обучение — это набор образцов, содержащий необходимые нам функции категорий.
var classNames = city.merge(water).merge(tree).merge(crop).merge(bare);
var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7','MNDWI','NDBI','NDVI'];
var training = image.select(bands).sampleRegions({
collection: classNames,
properties: ['landcover'],
scale: 30
});
Так как нам нужны не только данные обучения, но и данные проверки. Затем делим выборку на две части:
var withRandom = Training.randomColumn('random');//Случайное расположение точек выборки
// Мы хотим сохранить некоторые данные для тестирования, чтобы избежать переобучения модели.
var split = 0.7;
var trainingPartition = withRandom.filter(ee.Filter.lt('random', разделить));//Выбрать 70% выборок в качестве обучающих выборок
var testingPartition = withRandom.filter(ee.Filter.gte('random', разделить));//Выбрать 30% образцов в качестве тестовых образцов
GEE предоставляет слишком много методов. Это обусловлено личными потребностями. На следующем рисунке показаны все контролируемые методы классификации GEE.
Теперь, когда у нас есть метод и набор образцов 1, давайте классифицируем:
// Выберите атрибуты категории
var classProperty = 'landcover';
//Выбираем smileCart() для метода классификации randomForest() minimumDistance libsvm
var classifier = ee.Classifier.libsvm().train({
features: trainingPartition,
classProperty: 'landcover',
inputProperties: bands
});
//Классификация
var classified = image.select(bands).classify(classifier);
Проверка точности. Для этого необходимо использовать наш предыдущий набор проверочных данных. На этом этапе можно получить коэффициент каппа, общую точность и матрицу передачи.
var test = testPartition.classify(classifier);//Использовать классификацию тестового образца, чтобы определить набор данных и функцию, которые будут использоваться для операций с функциями
var confusionMatrix = test.errorMatrix('landcover', 'classification');//Рассчитываем матрицу путаницы
print('confusionMatrix',confusionMatrix);//Отображаем матрицу путаницы на панели
print('overall accuracy', замешательствоMatrix.accuracy());//На панели отображается общая точность
print('kappa accuracy', замешательствоMatrix.kappa());//Отображение значения каппы на панели
Этот экспорт все тот же, тут нечего сказать, просто следуйте своим требованиям. Например, это мой экспорт:
Export.image.toDrive({
image: classified,//Классификациярезультат
description: 'xuzhou_cart',//имя файла
folder: 'xuzhou_cart',
scale: 30,//Резолюция
region: рентабельность, // площадь
maxPixels:34e10//Установите здесь большее значение, чтобы предотвратить переполнение
});
Изображение ниже — результат моей контролируемой классификации. Вы можете видеть, что эффект неплох:
В заключение я хотел бы дать вам небольшое предложение: отбор образцов очень важен, метод классификации вторичен, необходимо обеспечить количество и точность образцов.
могу пойти в“Сбор геоинформационных данных дистанционного зондирования Земли»Получить больше данных。 https://www.gisrsdata.co
Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Этот сайт предоставляет только услуги по хранению информации, не имеет никаких прав собственности и не принимает на себя соответствующие юридические обязательства. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/191968.html Исходная ссылка: https://javaforall.cn