GEE Landsat 8 可见光影像校正后下载

在遥感影像处理领域,Landsat 8 数据因其 30 米空间分辨率多光谱波段 被广泛应用。处理这些数据时,研究者常常需要对数据进行裁剪、计算指数、图像增强等操作,以满足特定研究需求。
本文将介绍一个 Python 自动化脚本,使用 Google Earth Engine (GEE) 平台实现 Landsat 8 可见光影像校正后下载,并将结果导出到 Google Drive。


✨ 核心功能简介

这个脚本的主要功能如下:

  1. 自动裁剪 Landsat 8 数据 到指定地理区域;
  2. 遮蔽云与云影,提高影像质量;
  3. 计算 红、绿、蓝波段中值图像,并进行动态范围拉伸以防止过曝;
  4. 将处理后的 RGB 图像 导出到 Google Drive,便于进一步分析。

🔧 脚本代码实现

以下是完整的 Python 脚本实现,结合详细注释说明:

import ee

# 初始化 Google Earth Engine
ee.Initialize()

def crop_image_ls8(boundary, year, export_name, export_folder):
    """
    自动裁剪 Landsat 8 图像,遮蔽云层与云影,进行动态范围拉伸并导出结果。
    
    参数说明:
    :param boundary: 区域边界坐标,格式为 [xmin, ymin, xmax, ymax]。
    :param year: 中间年份,用于筛选影像时间范围。
    :param export_name: 导出的文件名。
    :param export_folder: 导出到 Google Drive 的目标文件夹。
    """
    # 将输入边界转换为 Earth Engine 几何对象
    boundary = [float(coord) for coord in boundary]
    CoordinateMapBoundary = ee.Geometry.Rectangle(boundary)

    # 云和云影遮蔽函数
    def mask_l8_sr(image):
        qa_band = image.select('QA_PIXEL')
        cloud_shadow_bitmask = 1 << 3  # 云影遮蔽位
        clouds_bitmask = 1 << 4        # 云层遮蔽位
        mask = qa_band.bitwiseAnd(cloud_shadow_bitmask).eq(0) \
            .And(qa_band.bitwiseAnd(clouds_bitmask).eq(0))  # 遮蔽条件
        return image.updateMask(mask).divide(10000)  # 归一化反射率
    
    # 获取 Landsat 8 数据集
    ls8_collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') \
        .filterBounds(CoordinateMapBoundary) \
        .filterDate(ee.Date.fromYMD(year - 1, 1, 1), ee.Date.fromYMD(year + 1, 12, 31)) \
        .map(mask_l8_sr).sort('CLOUD_COVER').limit(50)

    # 统计影像数量
    num_images = ls8_collection.size().getInfo()
    print(f'Landsat 8 影像数量: {num_images}')
    if num_images == 0:
        print('未找到符合条件的 Landsat 8 影像。')
        return None

    # 计算中值影像并裁剪到指定区域
    median_image = ls8_collection.median().clip(CoordinateMapBoundary)

    # 计算百分位值并应用动态范围拉伸
    stats = median_image.reduceRegion(
        reducer=ee.Reducer.percentile([2, 98]),
        geometry=CoordinateMapBoundary,
        scale=30,
        bestEffort=True
    )
    min_vals = stats.getInfo()  # 获取每个波段的百分位值
    print("百分位值:", min_vals)

    rgb_image = median_image.select(['SR_B4', 'SR_B3', 'SR_B2']).rename(['Red', 'Green', 'Blue']) 
    stretched_image = rgb_image.subtract([min_vals['SR_B4_p2'], min_vals['SR_B3_p2'], min_vals['SR_B2_p2']]) \
        .divide([min_vals['SR_B4_p98'] - min_vals['SR_B4_p2'],
                 min_vals['SR_B3_p98'] - min_vals['SR_B3_p2'],
                 min_vals['SR_B2_p98'] - min_vals['SR_B2_p2']]).sqrt()  # 防止过曝

    # 导出影像到 Google Drive
    task = ee.batch.Export.image.toDrive(
        image=stretched_image,
        description=export_name,
        folder=export_folder,
        fileNamePrefix=export_name,
        region=CoordinateMapBoundary,
        scale=30,
        maxPixels=1e13
    )
    task.start()
    print(f'任务已启动:导出到 Google Drive 文件夹 "{export_folder}" 下,文件名为 "{export_name}"')

📊 核心模块解读

1. 数据筛选与云层遮蔽

通过 mask_l8_sr 函数遮蔽云和云影,保证图像质量:

qa_band = image.select('QA_PIXEL')
cloud_shadow_bitmask = 1 << 3
clouds_bitmask = 1 << 4
mask = qa_band.bitwiseAnd(cloud_shadow_bitmask).eq(0) \
    .And(qa_band.bitwiseAnd(clouds_bitmask).eq(0))

2. 动态范围拉伸

为了避免图像过曝,计算 2% 和 98% 百分位值并拉伸图像:

stretched_image = rgb_image.subtract([min_vals['SR_B4_p2'], min_vals['SR_B3_p2'], min_vals['SR_B2_p2']]) \
    .divide([min_vals['SR_B4_p98'] - min_vals['SR_B4_p2'],
             min_vals['SR_B3_p98'] - min_vals['SR_B3_p2'],
             min_vals['SR_B2_p98'] - min_vals['SR_B2_p2']]).sqrt()

3. 导出结果

使用 Export.image.toDrive 将结果存储到 Google Drive:

task = ee.batch.Export.image.toDrive(
    image=stretched_image,
    description=export_name,
    folder=export_folder,
    fileNamePrefix=export_name,
    region=CoordinateMapBoundary,
    scale=30,
    maxPixels=1e13
)
task.start()

💡 应用场景

  1. 土地覆盖变化分析:提取清晰图像用于后续分类。
  2. 环境监测:分析多时段中值影像,跟踪环境变化。
  3. 定制区域研究:裁剪特定区域数据用于更精细的分析。

📋 术语与函数解释

术语/函数说明
Landsat 8美国陆地卫星计划的第八颗卫星,提供多光谱遥感影像数据,空间分辨率为 30 米。
QA_PIXELLandsat 影像中的质量评估波段,用于标识云层、云影等像元。
percentile百分位数,表示某一百分比数据的值,比如 2% 百分位值是数据中小于该值的部分占比为 2%。
Export.image.toDriveGoogle Earth Engine 函数,将处理后的图像导出到 Google Drive。
median计算多个影像中每个波段的中值影像,减少噪声影响。

如果这对您有所帮助,希望点赞支持一下作者! 😊

详细全文-点击查看

file

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值