基于 GEE 利用 SDWI 指数进行逐月水域面积提取
目录
1 SDWI指数
2 完整代码
3 运行结果

微波遥感具有全天候、全天时工作能力,能穿透云层,不受气象条件和光照水平影响,因此近年来利用微波遥感提取水体信息也备受关注。本文分享使用 Sentinel-1遥感影像通过SDWI指数来进行逐月水域面积计算提取和结果导出。
1 SDWI指数
Sentinel-1双极化数据SDWI水体提取指数公式:SDWI = ln (10×VV×VH)
Sentinel-1 Dual-Polarized Water Index (SDWI)水体信息提取方法对 Sentinel-1 双极化数据(VV 和 VH)之间水体信息提取的关系进行深入研究,达到增强水体特征的效果,水体区分较明显,同时消除土壤和植被对水体提取中造成的干扰。公式的指导思想是将 VV 和 VH 极化影像相乘,并且乘以 10,以此扩大水体与其他地物之间的差异,再以自然对数作为函数式。
2 完整代码
// 引入感兴趣区(ROI)并添加到地图
var roi = table;
Map.addLayer(roi);
Map.centerObject(roi, 8);// 设置时间范围和生成每月的日期范围
var startYear = 2021;
var endYear = 2023;
var months = ee.List.sequence(1, 12);// 使用Sentinel - 1数据集
var s1Collection = ee.ImageCollection('COPERNICUS/S1_GRD').filterBounds(roi).filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV')).filter(ee.Filter.eq('instrumentMode', 'IW'));// 定义 SDWI 计算函数
var calculateSDWI = function(image) {var VV = image.select('VV');var VH = image.select('VH');return image.expression('log(10 * VV * VH) - 8',{ 'VV': VV, 'VH': VH }).rename('SDWI');
};// 计算逐月水体掩膜面积
var calculateMonthlyWaterArea = function(year, month) {// 获取该月的开始和结束日期var startDate = ee.Date.fromYMD(year, month, 1);var endDate = startDate.advance(1, 'month');// 过滤 Sentinel - 1 图像集以获取当月的图像var monthlyCollection = s1Collection.filterDate(startDate, endDate).map(calculateSDWI);// 计算月度水体掩膜var sdwiComposite = monthlyCollection.median().clip(roi);var waterMask = sdwiComposite.gt(-0.1).rename('WaterMask');// 计算水体面积(平方千米)var areaImage = waterMask.multiply(ee.Image.pixelArea()).divide(1e6);var waterArea = areaImage.reduceRegion({reducer: ee.Reducer.sum(),geometry: roi,scale: 10,maxPixels: 1e9}).get('WaterMask');// 返回一个包含年、月和水体面积的字典return ee.Feature(null, {'Date': startDate.format('yyyy/M/d'),'Year': year,'Month': month,'WaterArea_km2': waterArea});
};// 对每个月进行水体面积计算并转换为 FeatureCollection
var calculateWaterAreaByMonth = function(year) {return ee.FeatureCollection(months.map(function(month) {return calculateMonthlyWaterArea(year, month);}));
};// 将所有年份的水体面积合并到一起
var allYearsWaterArea = ee.FeatureCollection(ee.List.sequence(startYear, endYear).map(calculateWaterAreaByMonth)
).flatten();// 导出逐月水体面积到 CSV 文件
Export.table.toDrive({collection: allYearsWaterArea,description: 'Monthly_Water_Area_2021_2022',fileFormat: 'CSV'
});// 可视化参数
var visParams = {min: 0,max: 1,palette: ['FFFFFF', '0000FF'] // 蓝色表示水体,白色表示非水体
};// 将逐月水体掩膜加载到地图上,并导出影像
for (var year = startYear; year <= endYear; year++) {for (var month = 1; month <= 12; month++) {var startDate = ee.Date.fromYMD(year, month, 1);var endDate = startDate.advance(1, 'month');var monthlyCollection = s1Collection.filterDate(startDate, endDate).map(calculateSDWI);var sdwiComposite = monthlyCollection.median().clip(roi);var waterMask = sdwiComposite.gt(-0.1).rename('WaterMask');// 在地图上显示每个月的水体掩膜var label = 'WaterMask_' + year + '_' + month;Map.addLayer(waterMask, visParams, label);// 导出逐月影像Export.image.toDrive({image: waterMask,description: 'WaterMask_' + year + '_' + month,folder: 'GEE/DTH/images',fileNamePrefix: 'WaterMask_' + year + '_' + month,region: roi,scale: 10,maxPixels: 1e13});}
}
3 运行结果
相关文章:
基于 GEE 利用 SDWI 指数进行逐月水域面积提取
目录 1 SDWI指数 2 完整代码 3 运行结果 微波遥感具有全天候、全天时工作能力,能穿透云层,不受气象条件和光照水平影响,因此近年来利用微波遥感提取水体信息也备受关注。本文分享使用 Sentinel-1遥感影像通过SDWI指数来进行逐月水域面积计…...
XMind 下载与使用教程:附百度网盘地址
一、引言 在信息爆炸的时代,如何高效地整理和管理知识成为了许多人面临的挑战。XMind 作为一款功能强大的思维导图软件,能够帮助我们清晰地梳理思路、整合信息,从而提升学习和工作效率。本文将详细介绍 XMind 的下载方法 二、XMind 的下载与…...
[EAI-034] 通过在线强化学习改进VLA模型
Paper Card 论文标题:Improving Vision-Language-Action Model with Online Reinforcement Learning 论文作者:Yanjiang Guo, Jianke Zhang, Xiaoyu Chen, Xiang Ji, Yen-Jen Wang, Yucheng Hu, Jianyu Chen 论文链接:https://arxiv.org/abs/…...
Python 和 JavaScript 中 Yield 的区别
Python 和 JavaScript 中 Yield 的区别 目录 Python 和 JavaScript 中 Yield 的区别PythonyieldJavaScriptyieldPythonyield fromJavaScriptyield* 推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 Pythonyield 在 Python 中…...
每日学习 设计模式 五种不同的单例模式
狮子大佬原文 https://blog.csdn.net/weixin_40461281/article/details/135050977 第一种 饿汉式 为什么叫饿汉,指的是"饿" 也就是说对象实例在程序启动时就已经被创建好,不管你是否需要,它都会在类加载时立即实例化,也就是说 实例化是在类加载时候完成的,早早的吃…...
【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址
🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🚀1.上传头像 -持久…...
SSM仓库物品管理系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码:2.保存物品信息代码:3.删除仓库信息代码: 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SSM框架开发的仓库…...
C++11新特性之unique_ptr智能指针
本节继续介绍智能指针,不了解的读者可以先阅读——C11新特性之shared_ptr智能指针-CSDN博客 1.介绍 unique_ptr是C11标准提供的另一种智能指针。与shared_ptr不同的是,unique_ptr指针指向的堆内存无法同其他unique_ptr共享,也就是每一片堆内…...
模型压缩 --学习记录2
模型压缩 --学习记录2 如何找到更好的权衡方式(模型量化)方法一:寻找更好的 range方法二:寻找更好的 X-fp32(浮点数)方法三:寻找更好的 scale 和 zp方法四:寻找更好的 roundPTQ 后训练量化(离线量化)QAT 量化感知训练(在线量化)量化为什么会带来加速?三、模型稀疏技…...
车载诊断工具技巧 --- CAPL Debug 功能使用介绍
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...
Sinusoidal(正弦曲线)位置编码公式详细推导过程
Sinusoidal(正弦曲线)位置编码公式推导 参考链接 Transformer升级之路:1、Sinusoidal位置编码追根溯源 1. 前置数学的基本概念 1.1 内积 定义: 内积是两个向量之间的一种运算,其结果为一个标量。公式: 对于向量 a [ a 1 , …...
<论文>DeepSeek-R1:通过强化学习激励大语言模型的推理能力(深度思考)
一、摘要 本文跟大家来一起阅读DeepSeek团队发表于2025年1月的一篇论文《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning | Papers With Code》,新鲜的DeepSeek-R1推理模型,作者规模属实庞大。如果你正在使用Deep…...
萌新学 Python 之字符串及字符串相关函数
字符串:单引号、双引号、三个单引号、三个双引号 字符串属于不可变的数据类型,一旦被定义,内存地址不变 name 张三 # 字符串赋值给name后,内存地址存储张三,地址不变 username 张三 # 张三去内存中找…...
如何改善RK3588基于MPP的H265传输码率
1、降低帧率 由原来的30fps修改为25fps,具体修改如下: H265Level level H264Level::L_1080P_30FPS;修改为 H265Level level H264Level::L_1080P_25FPS; 同时修改在MppInit函数中修改如下内容: uint32_t fps 30;修改为uint32_t fps 2…...
系统思考—自我超越
“人们往往认为是个人的能力限制了他们,但事实上,是组织的结构和惯性思维限制了他们的潜力。”—彼得圣吉 最近和一家行业隐形冠军交流,他们已经是领域第一,老板却依然要求:核心团队都要自我超越,攻坚克难…...
redis高级数据结构Stream
文章目录 背景stream概述消息 ID消息内容常见操作独立消费创建消费组消费 Stream弊端Stream 消息太多怎么办?消息如果忘记 ACK 会怎样?PEL 如何避免消息丢失?分区 Partition Stream 的高可用总结 背景 为了解决list作为消息队列是无法支持消息多播问题,Redis5.0…...
day44 QT核心机制
头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QLabel> //标签类头文件 #include<QPushButton> //按钮类头文件 #include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …...
打家劫舍3
今天和打家讲一下打家劫舍3 题目: 题目链接:337. 打家劫舍 III - 力扣(LeetCode) 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。 除了 root 之外,每栋房子有且只有一个“父“…...
webpack配置之---上下文
context context 是 Webpack 配置中的一个重要属性,它主要用于确定模块解析时的基础目录。可以理解为是 Webpack 在解析模块时,基于哪个目录作为根路径来查找模块。context 的默认值是 process.cwd(),即当前执行 Webpack 命令时的工作目录。…...
Spring Boot: 使用 @Transactional 和 TransactionSynchronization 在事务提交后发送消息到 MQ
Spring Boot: 使用 Transactional 和 TransactionSynchronization 在事务提交后发送消息到 MQ 在微服务架构中,确保消息的可靠性和一致性非常重要,尤其是在涉及到分布式事务的场景中。本文将演示如何使用 Spring Boot 的事务机制和 TransactionSynchron…...
2024中国行政区划多边形矢量数据(含有十段线)仅供学习
中国标准行政区划数据GS(2024)0650号,包括: 分省市县 省内分市 省内分县 南海十段线与岛屿区域 全国市级行政区划 通过网盘分享的文件:中国标准行政区划数据GS(2024)0650号.rar等4个文件 链接…...
给底部导航栏添加图形
文章目录 1. 概念介绍2. 修改方法2.1 修改属性2.2 包裹容器2.3 剪裁形状3. 代码与效果3.1 示例代码3.2 运行效果4. 内容总结我们在上一章回中介绍了"NavigationBar组件"相关的内容,本章回中将介绍如何修改NavigationBar组件的形状.闲话休提,让我们一起Talk Flutter…...
DeepSeek-R1 智能知识库系统使用指南
DeepSeek-R1 智能知识库系统使用指南 第一部分 基础操作教程 1.1 系统初始化 // 示例命令 > /initialize --configenterprise_knowledge --languagezh-CN [系统响应] 已加载企业知识图谱(含12万实体/35万关系)NLP引擎切换为中文混合语义模型1.2 基…...
#渗透测试#批量漏洞挖掘#WookTeam searchinfo SQL注入漏洞
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概述 二、漏洞成因分析 1. 代码…...
leetcode 做题思路快查
128. 最长连续序列 arr 1 2 3 4 100 200; A. for将元素加入hash_set; B.对于每个x, x-1不在hash_set则x是bengin节点,begin_vev 1 , 100 , 200; C. 对于bengin_vec中,如果x在hash_set,则序列长度 151. 反转字符串中的单词151. 反转字符串…...
HarmonyOS Next 方舟字节码文件格式介绍
在开发中,可读的编程语言要编译成二进制的字节码格式才能被机器识别。在HarmonyOS Next开发中,arkts会编译成方舟字节码。方舟字节码长什么样呢?我们以一个demo编译出的abc文件: 二进制就是长这样,怎么去理解呢&…...
iOS主要知识点梳理回顾-2-多线程
iOS的多线程主要有三种方式,NSThread、GCD(Grand Central Dispatch)NSOperationQueue 开始,在iOS2发布的时候,苹果同步推出了NSthread和NSOperation。其中NSthread比较简单,仅提供了创建队列、开始、取消、…...
WPS如何接入DeepSeek(通过JS宏调用)
WPS如何接入DeepSeek 一、文本扩写二、校对三、翻译 本文介绍如何通过 WPS JS宏调用 DeepSeek 大模型,实现自动化文本扩写、校对和翻译等功能。 一、文本扩写 1、随便打开一个word文档,点击工具栏“工具”。 2、点击“开发工具”。 3、点击“查看代码”…...
【课程设计参考】迷宫小游戏 :基于 Python+Pygame+AI算法
一、内容 实现走迷宫 (1)游戏界面显示:迷宫地图、上下左右移动的特效。 (2)动作选择:上下左右键对应于上下左右的移动功能,遇到障碍的处理。 (3)得分统计功能ÿ…...
sa8295 qnx ais_camare如何支持一个摄像头两路vc输出?
当一个摄像头有两个vc输出的时候,如何更改驱动配置呢? 当一个摄像头可以输出两路vc,并且格式不同。根据每一路的vc图像数据格式修改串行器中maxxxx_mode_t里面的数组mode参数(以下仅为例子) struct maxxxx_mode_t ma…...
