基于 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); // 应用云掩膜

通过neq和and操作符,构建了一个无云的掩膜,并将其应用到中值合成影像上,得到了干净无云的影像数据(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. 可视化参数设置 :通过min、max和palette参数,为叶绿素含量和冠层水分含量设置了合适的可视化范围和颜色渐变。

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

相关推荐
朱包林26 分钟前
iTerm2终端配置指南
linux·javascript·python·云原生·容器·kubernetes·云计算
酒神dnspup3 小时前
IPv6 网站访问异常怎么查?DNSPup 双栈检测、DNS 与端口排障指南
运维·云计算·域名·dns·dnspup
workflower18 小时前
矿用机器人人工智能安全与治理体系
人工智能·安全·机器学习·机器人·云计算·无人机
怪奇云呼军1 天前
教育试听预约后没到课,闪电智能 Voice Agent 如何做分层回访?
人工智能·python·算法·云计算·音视频
yichengerp1 天前
国内中小电子工厂用哪个erp系统好?
大数据·运维·人工智能·云计算·制造
sbjdhjd1 天前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全
GPU实战笔记1 天前
项目网盘大文件上传:暂停与取消的事实边界
云计算·文件上传·项目网盘·gpu云服务器
workflower1 天前
汽车自动驾驶9 要素
人工智能·机器学习·重构·云计算·汽车·无人机
阿乔外贸日记2 天前
全球电子产业高度集中:中、韩、日和中国台湾地区占全球数字硬件产能八成
大数据·服务器·人工智能·物联网·云计算