Сводка контролируемой классификации Google Earth Engine (GEE) и совместное использование кода
Сводка контролируемой классификации Google Earth Engine (GEE) и совместное использование кода

Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.

В своем коде контролируемой классификации я разделил его на следующие этапы:

1. Создайте данные обучающей выборки;

2. Скрининг данных ДЗЗ (время, местоположение и облачность);

3. Предварительная обработка данных ДЗЗ (удаление облаков, мозаика, кадрирование);

4. Построить спектральные индексы: NDVI, mNDWI, NDBI;

5. Построить классификационную выборку и разделить ее на обучающую и проверочную выборки;

6. Выберите подходящие методы классификации;

7. Проверка точности;

8. Результаты экспортной классификации;

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

1. Создайте данные обучающей выборки;

Обычно существует два метода построения выборочных данных: один — загрузить данные векторного обучения локально, другой — выбрать точки и создать их самостоятельно в GEE. Я в основном представляю второй метод.

Чтобы построить выборочные данные, сначала создайте новый слой, затем выберите объект и отметьте его на карте.

После выбора точек отбора проб не забудьте открыть объект, изменить тип слоя на коллекцию объектов и добавить атрибуты классификации: растительный покров и ценность. Например, значение точки отбора проб обрабатываемой земли равно 1.

2. Скрининг данных ДЗЗ (время, местоположение и облачность);

Этот шаг выбирается в соответствии с вашими потребностями. Окупаемость в моем коде — это область исследования. Если вы обнаружите, что в исследуемой области много облаков изображений, вы можете настроить стандарт фильтрации облаков на более высокий уровень.

Язык кода:javascript
копировать
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))//Облачная фильтрация
                  ;

3. Предварительная обработка данных ДЗЗ (удаление облаков, мозаика, кадрирование);

Первый шаг — создать функцию удаления облаков и инкапсулировать ее, чтобы вы могли вызвать ее в любое время.

Язык кода:javascript
копировать
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;
    }

Следующее предложение касается мозаики и обрезки:

Язык кода:javascript
копировать
var image=remove_cloud(collection).mosaic().clip(roi);

4. Построить спектральные индексы: NDVI, mNDWI, NDBI;

Этот шаг основан на требованиях каждого. В моей системе классификации есть вода, поэтому строится mndwi, потому что есть здания, строится ndbi, потому что есть растительность, строится NDVI; Конечно, этот шаг не является обязательным.

Язык кода:javascript
копировать
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

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

Язык кода:javascript
копировать
image=image
      .addBands(ndvi)
      .addBands(ndbi)
      .addBands(mndwi)

5. Построить классификационную выборку и разделить ее на обучающую и проверочную выборки;

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

Язык кода:javascript
копировать
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
});

Так как нам нужны не только данные обучения, но и данные проверки. Затем делим выборку на две части:

Язык кода:javascript
копировать
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% образцов в качестве тестовых образцов

6. Выберите подходящие методы классификации;

GEE предоставляет слишком много методов. Это обусловлено личными потребностями. На следующем рисунке показаны все контролируемые методы классификации GEE.

Теперь, когда у нас есть метод и набор образцов 1, давайте классифицируем:

Язык кода:javascript
копировать
// Выберите атрибуты категории
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);

7. Проверка точности;

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

Язык кода:javascript
копировать
var test = testPartition.classify(classifier);//Использовать классификацию тестового образца, чтобы определить набор данных и функцию, которые будут использоваться для операций с функциями

var confusionMatrix = test.errorMatrix('landcover', 'classification');//Рассчитываем матрицу путаницы
print('confusionMatrix',confusionMatrix);//Отображаем матрицу путаницы на панели
print('overall accuracy', замешательствоMatrix.accuracy());//На панели отображается общая точность
print('kappa accuracy', замешательствоMatrix.kappa());//Отображение значения каппы на панели

8. Результаты экспортной классификации;

Этот экспорт все тот же, тут нечего сказать, просто следуйте своим требованиям. Например, это мой экспорт:

Язык кода:javascript
копировать
Export.image.toDrive({
        image:  classified,//Классификациярезультат
        description: 'xuzhou_cart',//имя файла
        folder: 'xuzhou_cart',
        scale: 30,//Резолюция
        region: рентабельность, // площадь
        maxPixels:34e10//Установите здесь большее значение, чтобы предотвратить переполнение
      });

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

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

Полная ссылка на код:https://code.earthengine.google.com/3beb3602a1eb4ca79a3f04dddeee7192

могу пойти в“Сбор геоинформационных данных дистанционного зондирования Земли»Получить больше данных。 https://www.gisrsdata.co

Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Этот сайт предоставляет только услуги по хранению информации, не имеет никаких прав собственности и не принимает на себя соответствующие юридические обязательства. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.

Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/191968.html Исходная ссылка: https://javaforall.cn

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose