Обновление и оптимизация GEE: используйте GEE для обработки онлайн-руководств по нормализации индексов NDVI, EVI, SAVI, NDMI и других с 1985 по 2024 год! (данные Landsat C02)
Обновление и оптимизация GEE: используйте GEE для обработки онлайн-руководств по нормализации индексов NDVI, EVI, SAVI, NDMI и других с 1985 по 2024 год! (данные Landsat C02)

Введение

Это руководство по нормализации оптимизирует разоблачение данных, предварительную обработку и другие процессы. Коллеги интегрировали данные коллекции Landsat 5/7/8 соответственно, что является обработкой исходного диапазона, так что мы можем вызвать любой из 1985 года. до настоящего времени. Образы того периода нормализуются. Подробное введение в исходный текст можно найти в оригинальном блоге.

оригинальный блог

Учебное пособие по нормализации таких индексов, как NDVI, EVI, SAVI, NDMI, с помощью GEE (Google Earth Engine) онлайн! Блог _gee Computing ndwi-CSDN

код

код Язык:javascript
копировать
function maskL457sr(image) {
  // Bit 0 - Fill
  // Bit 1 - Dilated Cloud
  // Bit 2 - Unused
  // Bit 3 - Cloud
  // Bit 4 - Cloud Shadow
  var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
  var saturationMask = image.select('QA_RADSAT').eq(0);

  // Apply the scaling factors to the appropriate bands.
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBand = image.select('ST_B6').multiply(0.00341802).add(149.0);

  // Replace the original bands with the scaled ones and apply the masks.
  return image.addBands(opticalBands, null, true)
      .addBands(thermalBand, null, true)
      .updateMask(qaMask)
      .updateMask(saturationMask);
}

function maskL8sr(image) {
  // Bit 0 - Fill
  // Bit 1 - Dilated Cloud
  // Bit 2 - Cirrus
  // Bit 3 - Cloud
  // Bit 4 - Cloud Shadow
  var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
  var saturationMask = image.select('QA_RADSAT').eq(0);

  // Apply the scaling factors to the appropriate bands.
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);

  // Replace the original bands with the scaled ones and apply the masks.
  return image.addBands(opticalBands, null, true)
      .addBands(thermalBands, null, true)
      .updateMask(qaMask)
      .updateMask(saturationMask);
}


function rename57 (image) {
return image.select(['SR_B1','SR_B2','SR_B3','SR_B4',"SR_B5","SR_B7"],['blue', 'green', 'red','nir',"swir1","swir2"]);

}
function rename89 (image) {
return image.select(['SR_B2','SR_B3','SR_B4',"SR_B5","SR_B6","SR_B7"],['blue', 'green', 'red','nir',"swir1","swir2"]);

}



//Другие индексы могут ссылаться на функцию
//NDVI  
function NDVI(image) {  
  return image.addBands(  
    image.normalizedDifference(["nir", "red"])  
         .rename("NDVI"));  
}  
  
//NDWI  
function NDWI(image) {  
  return image.addBands(  
    image.normalizedDifference(["red", "swir1"])  
         .rename("NDWI"));  
}  
    
//NDBI  
function NDBI(image) {  
  return image.addBands(  
    image.normalizedDifference(["swir2", "swir1"])  
         .rename("NDBI"));  
} 
     
function EVI(image) { 
var evi = image.expression(  
    '2.5 * ((NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1))', {  
      'NIR': image.select('nir'),  
      'RED': image.select('red'),  
      'BLUE': image.select('blue')  
}); 
return image.addBands(evi.rename('EVI'));
}
;



// Map the function over one year of data.
var collection1 = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2').filterBounds(geometry)
                     .filterDate('1985-01-01', '2012-01-01')
                     .map(maskL457sr).map(rename57).map(NDVI).map(NDWI).map(NDBI).map(EVI);

var collection2 = ee.ImageCollection('LANDSAT/LE07/C02/T1_L2').filterBounds(geometry)
                     .filterDate('1985-01-01', '2012-01-01')
                     .map(maskL457sr).map(rename57).map(NDVI).map(NDWI).map(NDBI).map(EVI);

var collection3 = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2').filterBounds(geometry)
                     .filterDate('2013-01-01', '2024-01-01')
                     .map(maskL8sr).map(rename89).map(NDVI).map(NDWI).map(NDBI).map(EVI);

//При необходимости можно объединить
var col = collection1.merge(collection2).merge(collection3)

var image = col.first()

var scol_clip = image.clip(geometry)


function normalization(image,region,scale){
var mean_std = image.reduceRegion({
  reducer: ee.Reducer.mean()
            .combine(ee.Reducer.stdDev(),null, true),
  geometry: region,
  scale: scale,
  maxPixels: 10e9,
  // tileScale: 16
}); 
// use unit scale to normalize the pixel values
var unitScale = ee.ImageCollection.fromImages(
  image.bandNames().map(function(name){
    name = ee.String(name);
    var band = image.select(name);
    var mean=ee.Number(mean_std.get(name.cat('_mean')));
    var std=ee.Number(mean_std.get(name.cat('_stdDev')));
    var max=mean.add(std.multiply(3));
    var min=mean.subtract(std.multiply(3));
    var band1=ee.Image(min).multiply(band.lt(min)).add(ee.Image(max).multiply(band.gt(max)))
                        .add(band.multiply(ee.Image(1).subtract(band.lt(min)).subtract(band.gt(max))));
    var result_band=band1.subtract(min).divide(max.subtract(min));
    return result_band;
})).toBands().rename(image.bandNames());
  return unitScale;
}


//результат до нормализации
var before_chart=ui.Chart.image.histogram(scol_clip.select(["nir","EVI"]), geometry, 1000);
print(before_chart);
//Пусть изображение будет обработано функцией нормализации result
var normal_image=normalization(scol_clip,geometry,1000)
print(normal_image)
//Нормализованный результат
var after_chart=ui.Chart.image.histogram(normal_image.select(["nir","EVI"]), geometry, 1000)
print(after_chart)


print("image",image);
Map.centerObject(geometry, 3);

результат

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.