当前位置: 首页 > article >正文

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

目录

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.kler.cn/a/582782.html

相关文章:

  • Android Glide 的显示与回调模块原理源码级深度剖析
  • Vue+Node.js+MySQL+Element-Plus实现一个账号注册与登录功能
  • FPGA 实现 OV5640 摄像头视频图像显示
  • 如何制作Windows系统盘、启动盘?(MediaCreationTool_22H2)
  • Banana Pi 与瑞萨电子携手共同推动开源创新:BPI-AI2N
  • Java 大视界 -- Java 大数据在智能安防视频摘要与检索技术中的应用(128)
  • 【数据结构】-- LinkedList与链表(1)
  • MySQL数据库复杂的增删改查操作
  • 如何在Android中实现SQLite数据库操作
  • 【架构艺术】Go语言微服务monorepo的代码架构设计
  • STM32-Unix时间戳
  • Taro-Bluetooth-Print:让蓝牙打印也充满乐趣的开发组件库
  • 几种常见的虚拟环境工具(Virtualenv、Conda、System Interpreter、Pipenv、Poetry)的区别和特点总结
  • vue3+setup组件封装及传值
  • 小程序配置webview
  • 国产大模型DeepSeek在电力行业的应用研究报告:现状、案例与前景展望
  • oracle11.2.0.4 RAC 保姆级静默安装(二) DB数据库软件
  • Linux信号之捕捉信号
  • 【网络编程】事件选择模型
  • 蚂蚁灵波科技挂牌,蚂蚁具身智能大动作怎么看?