【数据优化】基于GEE填补遥感缺失数据

GEE填补遥感数据缺失

  • 1.写在前面
  • 2.填充代码
    • 2.1 年内中值数据填充MODIS NPP空值
    • 2.2 年内中值数据填充Landsat8 NDVI空值

1.写在前面

  在遥感影像分析中,我们经常会遇到由于云层遮挡、传感器故障等多重因素导致的图像数据缺失问题。为了解决这一挑战,常用的技术包括利用一年内数据的均值或最小值进行填充,以及采用线性插值等方法。在本文中,我们将探索如何借助 Google Earth Engine (GEE) 这一强大工具,以简洁高效的方式实现这些数据填充技术。这里我先使用年内数据填充法对多年数据进行填充。
  天地图平台发布了带有审图号(审图号:GS(2024)0650号)的最新的中国省、市、县行政区划可视化。该数据已经上传,并开通共享公开方便大家正常使用,代码如下:

2.填充代码

研究区设置:


// GS(2024)0650号========================================================================================
var china_provinces = ee.FeatureCollection("projects/ee-tilmacatanla/assets/boundry/china_provinces");
var china_city = ee.FeatureCollection("projects/ee-tilmacatanla/assets/boundry/china_city");
var china_county = ee.FeatureCollection("projects/ee-tilmacatanla/assets/boundry/china_county");
var sichuan = china_provinces.filter(ee.Filter.eq('name','四川省'))
var chengdu = china_city.filter(ee.Filter.eq('name','成都市'))
var Jingtang = china_county.filter(ee.Filter.eq('name','金堂县'))Map.addLayer(sichuan.style({fillColor:'00000000',color:'red'}),{},"四川省", 0) //ff0000
Map.addLayer(chengdu.style({fillColor:'00000000',color:'blue'}),{},"成都市", 1) //ffff00
Map.addLayer(Jingtang.style({color:"black"}),{},"金堂县")
Map.centerObject(Jingtang, 10);

在这里插入图片描述

2.1 年内中值数据填充MODIS NPP空值

function FillgapNPP(image){var median = image.reduceRegion({reducer:ee.Reducer.median(),geometry:Jingtang.geometry(),scale:500,maxPixels:1e13}).values();median = ee.Number(median);var FillImage = image.unmask(median).clip(Jingtang);return FillImage;
}var NPP = ee.ImageCollection("MODIS/061/MOD17A3HGF")
var NPPdata = NPP.map(function(image){return image.clip(Jingtang)}).toList(22).aside(print);var NPP2011 = ee.Image(NPPdata.get(10)).select('Npp').aside(print);
var NPP2016 = ee.Image(NPPdata.get(15)).select('Npp').aside(print);
var NPP2022 = ee.Image(NPPdata.get(21)).select('Npp').aside(print);var NPP2011_Fill = FillgapNPP(NPP2011);
var NPP2016_Fill = FillgapNPP(NPP2016);
var NPP2022_Fill = FillgapNPP(NPP2022);var visualization = {bands: ['Npp'],min: 0,max: 19000,palette: ['ffffff', 'ce7e45', 'df923d', 'f1b555', 'fcd163', '99b718', '74a901','66a000', '529400', '3e8601', '207401', '056201', '004c00', '023b01','012e01', '011d01', '011301']
};Map.addLayer(NPP2022,visualization,'NPP2022')
Map.addLayer(NPP2022_Fill,visualization,'NPP2022_Fill')

结果展示:
在这里插入图片描述

2.2 年内中值数据填充Landsat8 NDVI空值

  这里为了让数据出现空值,我使用了2014年-2023年6-8月的数据,若使用全年的数据,可能不会出现空值的情况。

//2.Landsat8 NDVI插值======================================================================
//函数定义=================================================================================
// Applies scaling factors.
function applyScaleFactors(image) {var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);return image.addBands(opticalBands, null, true).addBands(thermalBands, null, true);
}
function rmCloudNew(image) {var cloudShadowBitMask = (1 << 4); var cloudsBitMask = (1 << 3); var qa = image.select('QA_PIXEL'); var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0) .and(qa.bitwiseAnd(cloudsBitMask).eq(0)); return image.updateMask(mask).copyProperties(image).copyProperties(image, ["system:time_start"]);
}
var get_NDVI = function(image) {var NDVI=image.normalizedDifference(['nir','red']).rename(['NDVI']);image=image.addBands(NDVI)return image.select("NDVI")
};
// 定义一个函数来填充 Landsat 8 图像中的缺失值
function fillGapLandsat8(image) {// 计算整个 Jingtang 区域内所有像素值的中位数var median = image.reduceRegion({reducer: ee.Reducer.median(),geometry: Jingtang.geometry(),scale: 30,maxPixels: 1e13}).values(); median = ee.Number(median);var fillImage = image.unmask(median).clip(Jingtang);return fillImage;
}// Landsat8===================================================================================
var Landsat = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2').filterBounds(Jingtang).filter(ee.Filter.calendarRange(2014,2023,'year')).filter(ee.Filter.calendarRange(1,12,'month')).map(applyScaleFactors).select(['SR_B4','SR_B5','QA_PIXEL'],['red','nir','QA_PIXEL']).map(rmCloudNew).map(get_NDVI);
print("Landsat:", Landsat)var startDate = 2014
var endDate = 2023
for(var i = startDate;i<=endDate;i++){var ndvi_year = Landsat.filterDate(i+'-06-01', i+'-08-31').select('NDVI')var ndvi_median = ndvi_year.median().clip(Jingtang)// 给每个月的NDVI图像指定一个波段名称var ndvi_band = ndvi_median.rename('NDVI_median_' + i);var Landsat8_fill = fillGapLandsat8(ndvi_band)Map.addLayer(ndvi_band, colorizedVis, 'NDVI_median_' + i, 0);Map.addLayer(Landsat8_fill, colorizedVis, 'NDVI_median_' + i + '_Fill', 0);Export.image.toDrive({image: Landsat8_fill,description: i+'year_median',region: Jingtang,scale: 30,maxPixels: 1e13,folder: 'NDVI_year'})
}

结果展示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146918.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium with Python学习笔记整理(网课+网站持续更新)

本篇是根据学习网站和网课结合自己做的学习笔记&#xff0c;后续会一边学习一边补齐和整理笔记 官方学习网站在这获取&#xff1a; https://selenium-python.readthedocs.io/getting-started.html#simple-usage WEB UI自动化环境配置 (推荐靠谱的博客文章来进行环境配置,具…

MySQL高阶之存储过程

什么是存储过程? 存储过程可称为过程化SQL语言&#xff0c;是在普通SQL语句的基础上增加了编程语言的特点&#xff0c;把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中&#xff0c;通过逻辑判断、循环等操作实现复杂计算的程序语言。 换句话说&#xff0c;存储过程其实…

Acwing BFS

一般通过队列实现&#xff0c;当边的权值相同时具有最短性&#xff0c;可以求最少操作步数。相比DFS无需回溯&#xff0c;而是逐层搜索。 Acwing 844 走迷宫 输入样例&#xff1a; 5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 输出样例&#xff1a; 8 思路分析&am…

Spring Boot蜗牛兼职网:全栈开发

第4章 系统设计 4.1 系统体系结构 蜗牛兼职网的结构图4-1所示&#xff1a; 图4-1 系统结构 登录系统结构图&#xff0c;如图4-2所示&#xff1a; 图4-2 登录结构图 蜗牛兼职网结构图&#xff0c;如图4-3所示。 图4-3 蜗牛兼职网结构图 4.2开发流程设计 系统流程的分析是通…

[今日Arxiv] 思维迭代:利用内心对话进行自主大型语言模型推理

思维迭代&#xff1a;利用内心对话进行自主大型语言模型推理 Iteration of Thought: Leveraging Inner Dialogue for Autonomous Large Language Model Reasoning URL&#xff1a;https://arxiv.org/abs/2409.12618 注&#xff1a;翻译可能存在误差&#xff0c;详细内容建议…

Java -2

常用API System 可以获取当前时间&#xff0c;以此计算运行代码的时间也可以控制代码的结束 //获取当前时间点-毫秒 1970 1-1 8:00 long num System.currentTimeMillis(); System.out.println(num);//系统退出运行 System.exit(0); Runtime 获取操作系统的线程大小 能从操…

YOLOv8改进 | 主干网络 | 将backbone替换为Swin-Transformer结构【论文必备】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

Tansformer代码实现

目录 1.Tansformer架构图 2.代码实现 2.1创建类&#xff1a;实现基于位置的前馈网络 2.2创建 残差&LN层标准归一化的类 2.3编码器block 2.4创建编码器 2.5创建解码器 2.6transformer解码器部分 3.知识点个人理解 1.Tansformer架构图 2.代码实现 2.1创建类&…

连续数组问题

目录 一题目&#xff1a; 二思路&#xff1a; 三代码&#xff1a; 一题目&#xff1a; leetcode链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二思路&#xff1a; 思路&#xff1a;前缀和&#xff08;第二种&#xff09;化0为-1hash&#xff1a; 这样可以把…

【大模型实战篇】一种关于大模型高质量数据的处理方法-无标注数据类别快速识别及重复数据检测(加权向量-卷积神经网络-聚类算法结合)

1. 背景介绍 大模型的能力很大程度上依赖于高质量的数据&#xff0c;在之前的一篇文章《高质量数据过滤及一种BoostedBaggingFilter处理方法的介绍》中&#xff0c;我们介绍了大模型的数据处理链路&#xff0c;本文继续关注在高质量数据的模块。 本文所要介绍的处理方法&…

vscode 配置django

创建运行环境 使用pip安装Django&#xff1a;pip install django。 创建一个新的Django项目&#xff1a;django-admin startproject myproject。 打开VSCode&#xff0c;并在项目文件夹中打开终端。 在VSCode中安装Python扩展&#xff08;如果尚未安装&#xff09;。 在项…

滑动窗口经典题目

目录 滑动窗口 什么是滑动窗口&#xff1f; 什么时候用滑动窗口&#xff1f; 怎么用滑动窗口&#xff1f; 209. 长度最小的子数组&#xff08;滑动窗口的引入&#xff09; 3. 无重复字符的最长子串 1004. 最大连续1的个数 III 1658. 将 x 减到 0 的最小操作数 904. 水…

Fyne ( go跨平台GUI )中文文档-容器和布局 (四)

本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章&#xff1a; Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…

【重学 MySQL】三十七、聚合函数

【重学 MySQL】三十七、聚合函数 基本概念5大常用的聚合函数COUNT()SUM()AVG()MAX()MIN() 使用场景注意事项示例查询 聚合函数&#xff08;Aggregate Functions&#xff09;在数据库查询中扮演着至关重要的角色&#xff0c;特别是在处理大量数据时。它们能够对一组值执行计算&a…

37. Vector3与模型位置、缩放属性

本文章给通过组对象Group (opens new window)给大家讲解一下threejs层级模型或树结构的概念。 Group层级模型(树结构)案例 下面代码创建了两个网格模型mesh1、mesh2&#xff0c;通过THREE.Group类创建一个组对象group,然后通过add方法把网格模型mesh1、mesh2作为设置为组对象g…

Vuex的使用看这一篇就够了

Vuex概述 Vuex 是一个专为 Vue.js 应用程序开发的状态管理库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以一种可预测的方式来保证状态以一种可预测的方式发生变化。 state状态 把公用的数据放到store里的state就行了&#xff0c;上面是vue2的代码&#xff0c;下…

[大语言模型] LINFUSION:1个GPU,1分钟,16K图像

1. 文章 2409.02097 (arxiv.org)https://arxiv.org/pdf/2409.02097 LINFUSION: 1 GPU, 1 MINUTE, 16K IMAGE 摘要 本文介绍了一种新型的扩散模型LINFUSION&#xff0c;它能够在保持高分辨率图像生成性能的同时显著降低时间和内存复杂度。该模型采用了基于Transformer的UNet进…

【前端】ES6:Class语法和Class继承

文章目录 1 Class语法1.1 类的写法1.2 getter与setter1.3 静态属性和静态方法 2 Class继承 1 Class语法 1.1 类的写法 class Person {constructor(name,age){this.name name;this.age age;}say(){console.log(this.name,this.age)} } let obj new Person("kerwin&quo…

python--基础语法(2)

1.顺序语句 默认情况下&#xff0c;Python的代码执行顺序是按照从上到下的顺序&#xff0c;依次执行的。 2.条件语句 条件语句能够表达“如果 ...否则 ...”这样的语义这构成了计算机中基础的逻辑判定条件语&#xff0c; 也叫做 分支语句。表示了接下来的逻辑可能有几种走向…

SysML图例-10cm最小航天器AC-10

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> SysML图中词汇 AC10 AeroCube-10&#xff0c;大小仅为10 10 15 cm的卫星&#xff0c;更多信息参见下文&#xff1a; AeroCube-10成为迄今为止完成在轨接近操作的最小航天…