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

目录

[1 数据加载与预处理](#1 数据加载与预处理)

[2 叶绿素含量反演](#2 叶绿素含量反演)

[3 冠层水分反演](#3 冠层水分反演)

[4 数据可视化与导出](#4 数据可视化与导出)

[5 完整代码](#5 完整代码)

[6 运行结果](#6 运行结果)


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

1 数据加载与预处理

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

javascript 复制代码
/******************** 数据加载与预处理 ********************/
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的像素表示薄云。可以通过以下代码构建云掩膜:

javascript 复制代码
// 云掩膜(基于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。

javascript 复制代码
/******************** 叶绿素含量反演 ********************/
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 冠层水分反演

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

javascript 复制代码
/******************** 冠层水分反演 ********************/
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方法将结果添加到地图上,并通过设置合适的可视化参数(如最小值、最大值和调色板),使结果更加直观易懂。

javascript 复制代码
/******************** 可视化与导出 ********************/
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 完整代码

javascript 复制代码
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即可下载数据
叶绿素含量反演结果可视化
冠层水分反演结果可视化

相关推荐
Smoothcloud润云2 小时前
国内GPU算力租赁平台横向测评:资源、成本、稳定性三维对比
人工智能·ai·云计算·gpu算力·gpu
故乡de云9 小时前
AWS 绑卡失败排查全流程:预授权、3D Secure 与账单信息不一致的完整定位方法
云计算·aws
行业研究员10 小时前
AI原生的商城智能经营平台合作商推荐:腾讯云Mall
云计算·腾讯云·ai-native
故乡de云11 小时前
AWS 更换信用卡完整教程:绑定新卡、切换默认支付方式与扣款失败排查
云计算·aws
酷可达拉斯12 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
AI小译13 小时前
ShareGPT 数据集格式
数据集·sharegpt
国科安芯13 小时前
空间机电一体化:AS32S601型抗辐射MCU在卫星推进与执行机构控制中的关键技术研究
单片机·嵌入式硬件·物联网·机器人·云计算
前网易架构师-高司机1 天前
带标注的移动通信基站信号塔,可识别塔架和塔身数据集,识别率93.5%,1008张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·数据集·通信基站·信号塔·塔架·塔身
玩转4G物联网1 天前
FS800DTU 新品上线|免费使用 DMP 设备管理平台,支持远程批量配置 & OTA 升级
物联网·网络协议·tcp/ip·云平台·核心板·fs800dtu·iot管理平台
Qianyunzhiyun2 天前
AWS根用户MFA怎么设置?新账号安全教程
安全·云计算·aws