基于 GEE 利用 Sentinel-2 数据反演叶绿素与冠层水分含量

devtools/2025/3/16 23:58:10/

目录

1 数据加载与预处理

2 叶绿素含量反演

3 冠层水分反演

4 数据可视化与导出

5 完整代码

6 运行结果


在生态学和环境科学领域,植被的健康状况是评估生态系统稳定性和功能的关键指标之一。而叶绿素含量和冠层水分含量作为反映植被生理状态的重要参数,一直是遥感监测的核心目标。接下来,将通过Google Earth Engine(GEE)平台,分享如何利用Sentinel-2卫星数据反演叶绿素含量和冠层水分含量,并通过代码实现这一过程。

1 数据加载与预处理

在进行生态参数反演之前,需要加载并预处理卫星数据。这里选择了Sentinel-2卫星的“COPERNICUS/S2_SR_HARMONIZED”数据集,它提供了高质量的地表反射率产品,具有10米至60米的空间分辨率,非常适合植被监测。

/******************** 数据加载与预处理 ********************/
var s2 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")// 设置时间范围.filterDate('2023-01-01', '2023-11-30')// 限定研究区域.filterBounds(roi)// 筛选云量小于20%的影像.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))// 波段名称标准化.map(function (img) {return img.rename(['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7','B8', 'B8A', 'B9', 'B11', 'B12','AOT', 'WVP', 'SCL', 'TCI_R', 'TCI_G', 'TCI_B','MSK_CLDPRB', 'MSK_SNWPRB', 'QA10', 'QA20', 'QA60','MSK_CLASSI_OPAQUE', 'MSK_CLASSI_CIRRUS', 'MSK_CLASSI_SNOW_ICE']);})// 计算中值合成影像.median()// 裁剪至研究区域.clip(roi);

关键步骤解析:

  1. 时间范围筛选:通过filterDate方法,选择了2023年1月1日至11月30日的数据。您可以根据研究需求调整时间范围。

  2. 云量筛选:通过filter方法结合ee.Filter.lt,剔除了云量超过20%的影像,以减少云层对分析结果的干扰。

  3. 波段名称标准化:Sentinel-2数据的波段名称通常以“B04”、“B05”等形式出现。为了方便后续计算,将波段名称统一更正为“B4”、“B5”等。

  4. 中值合成:通过median方法,计算了中值合成影像,以减少噪声和异常值的影响。

  5. 裁剪至研究区域:使用clip方法将影像裁剪至感兴趣区域(roi),确保分析的精确性。

云掩膜处理:

云层是遥感影像中常见的干扰因素,它会掩盖地表的真实信息。Sentinel-2数据提供了“SCL”(Scene Classification Layer)波段,用于地表分类。其中,值为3的像素表示云中像素,值为8的像素表示云影,值为9的像素表示薄云。可以通过以下代码构建云掩膜:

// 云掩膜(基于SCL分类波段)
var cloudMask = s2.select('SCL').neq(3) // 排除云中像素.and(s2.select('SCL').neq(8))      // 排除云影.and(s2.select('SCL').neq(9));     // 排除薄云var s2Clean = s2.updateMask(cloudMask); // 应用云掩膜

通过neqand操作符,构建了一个无云的掩膜,并将其应用到中值合成影像上,得到了干净无云的影像数据(s2Clean)。

2 叶绿素含量反演

叶绿素是植物进行光合作用的核心色素,其含量直接反映了植物的生长状况和健康水平。在遥感领域,叶绿素含量可以通过植被反射光谱的特定波段计算得到,采用以下公式进行叶绿素含量反演:

其中:

  • B8A:865nm波段(近红外增强植被反射)

  • B5:705nm波段

  • B4:665nm波段

公式 3.2 * (B8A - B5)/(B8A + B5 + 0.15) * sqrt(B8A/B4) 是多个经典指数的合成优化,其中系数可以通过地面实测数据校准获得,这里取3.2。

/******************** 叶绿素含量反演 ********************/
var Cab = s2Clean.expression('3.2 * (B8A - B5) / (B8A + B5 + 0.15) * sqrt(B8A/B4)',{'B8A': s2Clean.select('B8A'),'B5': s2Clean.select('B5'),'B4': s2Clean.select('B4')}
).rename('Chlorophyll');

通过expression方法,将公式嵌入代码中,并将结果命名为“Chlorophyll”(叶绿素含量)。 

3 冠层水分反演

冠层水分含量是植被生理状态的重要指标之一,它反映了植被在水分胁迫下的适应能力和健康状况。采用以下公式进行冠层水分反演:

/******************** 冠层水分反演 ********************/
var Cw = s2Clean.expression('(B11 - B12)/(B11 + B12 + 0.03) * log(B8A)',{'B11': s2Clean.select('B11'),'B12': s2Clean.select('B12'),'B8A': s2Clean.select('B8A')}
).rename('CanopyWater');

通过expression方法,我们将公式嵌入代码中,并将结果命名为“CanopyWater”(冠层水分含量)。

4 数据可视化与导出

完成生态参数反演后,需要将结果可视化并导出。在GEE中,通过Map.addLayer方法将结果添加到地图上,并通过设置合适的可视化参数(如最小值、最大值和调色板),使结果更加直观易懂。

/******************** 可视化与导出 ********************/
var visCab = {min: 0,max: 6,palette: ['#FFFFCC', '#A1DAB4', '#41B6C4', '#225EA8', '#081D58']
};
var visCw = {min: -0.2,max: 0.7,palette: ['#0000FF', '#00FFFF', '#FFFF00', '#FF0000']
};Map.addLayer(Cab, visCab, '叶绿素含量(μg/cm²)');
Map.addLayer(Cw, visCw, '冠层水分指数');// 分项导出设置
Export.image.toDrive({image: Cab,description: 'Cab_20m_S2_2023Summer',folder: 'Sentinel2_EcoParams',region: roi,scale: 20,maxPixels: 1e13
});
Export.image.toDrive({image: Cw,description: 'Cw_20m_S2_2023Summer',folder: 'Sentinel2_EcoParams',region: roi,scale: 20,maxPixels: 1e13
});

关键步骤解析:

  1. 可视化参数设置:通过minmaxpalette参数,为叶绿素含量和冠层水分含量设置了合适的可视化范围和颜色渐变。

  2. 导出设置:通过Export.image.toDrive方法,将反演结果导出至Google Drive。导出的图像分辨率为20米,与Sentinel-2影像的空间分辨率相匹配。

5 完整代码

Map.centerObject(roi,7)
var styling = {color:"red",fillColor:"00000000"};
Map.addLayer(roi.style(styling),{},"geometry")/******************** 数据加载与预处理 ********************/
var s2 = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED").filterDate('2023-01-01', '2023-11-30') // 需修改日期可调整此处.filterBounds(roi).filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)).map(function (img) {// 波段名称标准化(用户数据实际波段名)return img.rename(['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7','B8', 'B8A', 'B9', 'B11', 'B12', // 关键修正点:B04→B4,B05→B5'AOT', 'WVP', 'SCL', 'TCI_R', 'TCI_G', 'TCI_B','MSK_CLDPRB', 'MSK_SNWPRB', 'QA10', 'QA20', 'QA60','MSK_CLASSI_OPAQUE', 'MSK_CLASSI_CIRRUS', 'MSK_CLASSI_SNOW_ICE']);}).median().clip(roi);// 云掩膜(基于SCL分类波段)
var cloudMask = s2.select('SCL').neq(3) // 3=云中像素.and(s2.select('SCL').neq(8)) // 8=云影.and(s2.select('SCL').neq(9)); // 9=薄云var s2Clean = s2.updateMask(cloudMask);/******************** 叶绿素含量反演 ********************/
var Cab = s2Clean.expression('3.2 * (B8A - B5) / (B8A + B5 + 0.15) * sqrt(B8A/B4)',{'B8A': s2Clean.select('B8A'), // 865nm(原B8A)'B5': s2Clean.select('B5'), // 705nm(原B05)'B4': s2Clean.select('B4') // 665nm(原B04)}
).rename('Chlorophyll');/******************** 冠层水分反演 ********************/
var Cw = s2Clean.expression('(B11 - B12)/(B11 + B12 + 0.03) * log(B8A)',{'B11': s2Clean.select('B11'), // 1610nm'B12': s2Clean.select('B12'), // 2190nm'B8A': s2Clean.select('B8A') // 近红外增强植被反射}
).rename('CanopyWater');/******************** 可视化与导出 ********************/
var visCab = {min: 0,max: 6,palette: ['#FFFFCC', '#A1DAB4', '#41B6C4', '#225EA8', '#081D58']
};
var visCw = {min: -0.2,max: 0.7,palette: ['#0000FF', '#00FFFF', '#FFFF00', '#FF0000']
};Map.addLayer(Cab, visCab, '叶绿素含量(μg/cm²)');
Map.addLayer(Cw, visCw, '冠层水分指数');// 分项导出设置
Export.image.toDrive({image: Cab,description: 'Cab_20m_S2_2023Summer',folder: 'Sentinel2_EcoParams',region: roi,scale: 20,maxPixels: 1e13
});Export.image.toDrive({image: Cw,description: 'Cw_20m_S2_2023Summer',folder: 'Sentinel2_EcoParams',region: roi,scale: 20,maxPixels: 1e13
});

6 运行结果

点击RUN即可下载数据
叶绿素含量反演结果可视化
冠层水分反演结果可视化

http://www.ppmy.cn/devtools/167674.html

相关文章

qt stm32 发送接受浮点数以及两字节数

void MainWindow::on_pushButton_4_clicked() { TPCANMsg msg; bool ok; float dianliu ui->lineEditdianliu->text().toFloat(&ok); // 输入验证 if (!ok) { ui->status->setText("电流输入无效,请重新输入…

【黑马点评|项目】万字总结(下)

文章上半部分: 【黑马点评|项目】万字总结(上) 优惠卷秒杀 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题: id的规律性太明显,容易出…

如何在androidstudio开发环境中查看sqlite数据库(按新版本Android Studio Giraffe提供详细步骤和操作说明,附截图,代码)

如何在androidstudio开发环境中查看sqlite数据库(按新版本Android Studio Giraffe提供详细步骤和操作说明,附截图,代码)鹿溪IT工作室提供_android studio查看数据库-CSDN博客

使用 ConfigMaps 可以优化 Spring Boot应用

基本概念 ConfigMaps:Kubernetes 中的一种资源对象,用于存储非敏感的配置数据,如应用程序属性、环境变量等。 主要优势 简化部署:无需在容器镜像中嵌入配置,减少镜像大小,加快部署速度。 动态更新&#…

如何在AVL树中高效插入并保持平衡:一步步掌握旋转与平衡因子 —— 平衡因子以及AVL结构篇

文章目录 AVL树的概念AVL树的结构AVL树的插入平衡因子更新终止条件插入以及平衡因子的保持AVL树的查找 AVL树的概念 AVL树(Adelson-Velsky and Landis Tree)是一种自平衡二叉查找树,它的特点是每个节点的左子树和右子树的高度差不能超过1。这…

grunt构建工具:scss转css

Grunt 是一个基于 JavaScript 的任务运行工具,通常用于自动化重复性任务,例如代码编译、文件压缩、单元测试等。它通过配置文件 Gruntfile.js 来定义任务和插件。 完整项目地址:https://github.com/ylpxzx/grunt-scss-to-css 以下是 Grunt 的…

爬虫基础之爬取豆瓣同城信息(保存为csv excel 数据库)

网站:长沙最近一周戏剧活动_豆瓣 温馨提示: 本案例仅供学习交流使用 本案例所使用的模块 requests(发送HTTP请求)pandas(数据保存模块)lxml(用于解析数据模块)csv(用于保存为csv文件)pymysql(用于操作数据库)parsel(解析数据的模块) 确定爬取的信息内容: 戏剧的名称…

贪心算法(6)(java)优势洗牌

题目: 给定两个长度相等的数组nums1和nums2,nums1相对于nums2的优势可以满足nums1【1】>nums[2]的索引的数目来描述。 返回nums1的任意排列,使其相对于nums2的透视最大化呀。 原理(贪心策略):田忌赛马 1.如果比不…