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 Drivetask = 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482697.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab Simulink HDL Coder开发流程(一)— 创建HDL兼容的Simulink模型

创建HDL兼容的Simulink模型 一、使用Balnk DUT模板二、从HDL Coder库中选择模块三、为DUT开发算法/功能四、为设计创建Testbench五、仿真验证设计功能六、Simulink模型生成HDL代码 这个例子说明了如何创建一个用于生成HDL代码的Simulink模型。要创建兼容HDL代码生成的MATLAB算法…

如何通过 JWT 来解决登录认证问题

1. 问题引入 在登录功能的实现中 传统思路&#xff1a; 登录页面时把用户名和密码提交给服务器服务器验证用户名和密码&#xff0c;并把检验结果返回给后端如果密码正确&#xff0c;则在服务器端创建 session&#xff0c;通过 cookie 把 session id 返回给浏览器 但是正常情…

像素流送api ue多人访问需要什么显卡服务器

关于像素流送UE推流&#xff0c;在之前的文章里其实小芹和大家聊过很多&#xff0c;不过今天偶然搜索发现还是有很多小伙伴&#xff0c;在搜索像素流送相关的问题&#xff0c;搜索引擎给的提示有这些。当然这些都是比较短的词汇&#xff0c;可能每个人真正遇到的问题和想获取的…

Uniad复现学习

在优云平台部署训练&#xff0c;加速训练。 关于UCloud(优刻得)旗下的compshare算力共享平台 UCloud(优刻得)是中国知名的中立云计算服务商&#xff0c;科创板上市&#xff0c;中国云计算第一股。 UCloud&#xff08;优刻得&#xff09;旗下的Compshare算力共享平台具有以下优点…

域名解析系统 DNS

1.域名系统概述 用户与互联网上某台主机通信时&#xff0c;必须要知道对方的IP地址。然而用户很难记住长达32 位的二进制主机地址。即使是点分十进制地址也并不太容易记忆。但在应用层为了便于用户记忆各种网络应用&#xff0c;连接在互联网上的主机不仅有P地址&#xff0c;而…

【软考网工笔记】网络基础理论——网络层

文章目录 中断处理过程数据包组装RIPRSVPipv4RIPv1 & RIPv2HFC 混合光纤同轴电缆&#xff08;Hybrid Fiber Coax&#xff0c;简称HFC&#xff09;BGP (边界网关协议)BGP-4 协议的四种报文ICMP 协议数字语音电子邮件协议MPLS 多协议标记交换ipv6DHCPDNS名称解析过程查询顺序…

go语言 Pool实现资源池管理数据库连接资源或其他常用需要共享的资源

go Pool Pool用于展示如何使用有缓冲的通道实现资源池&#xff0c;来管理可以在任意数量的goroutine之间共享及独立使用的资源。这种模式在需要共享一组静态资源的情况&#xff08;如共享数据库连接或者内存缓冲区&#xff09;下非 常有用。如果goroutine需要从池里得到这些资…

【Delphi】modbus-TCP 协议库

在日常开发中&#xff0c;也会遇到使用modbus的部件&#xff0c;比如温度控制器、读卡器等等&#xff0c;那么使用Delphi开发&#xff0c;也就必须遵守modbus-TCP协议&#xff0c;如果自己使用TCP控件写也没有问题&#xff0c;不过如果有开源的三方库&#xff0c;别人已经调试过…

【Git 操作】-- 将 fork master 分支的最新commit更新到自己的仓库

目录 1.举例 2. 配置上游仓库&#xff08;Upstream&#xff09; 3. 获取上游仓库的更新 4. 切换到你自己的 master 分支 5. 合并上游仓库的 master 分支 6. 解决冲突&#xff08;如果有的话&#xff09; 7. 推送更新到你自己的 GitHub 仓库 1.举例 当我们从 github 的 h…

Facebook的开源项目解析:推动开发者社区的技术进步

Facebook&#xff0c;作为全球领先的社交平台之一&#xff0c;其在技术领域的创新不仅体现在产品功能的实现上&#xff0c;也积极推动开源社区的发展。开源项目已经成为Facebook技术战略的重要组成部分&#xff0c;通过开源&#xff0c;Facebook不仅加速了技术进步&#xff0c;…

荣耀300系列革新发布:科技与美学的里程碑之作

2024年12月2日&#xff0c;全新一代荣耀300系列正式发布&#xff0c;新潮的环球旅拍发布会不仅展现了荣耀追求极致的创新理念&#xff0c;也标志着数字系列迎来科技体验以及美学设计的巨大升级。凭借荣耀领先行业的AI能力以及对底层科技创新的强大驱动&#xff0c;全新荣耀300系…

centos 7 离线安装postgis插件

前一段时间记录了下如何在centos7中离线安装postgresql&#xff0c;因为工作需要&#xff0c;我不仅要安装postgresql&#xff0c;还需要安装postgis插件&#xff0c;这篇文章记录下postgis插件的安装过程。 1. 安装前的参考 如下的链接都是官网上的链接&#xff0c;对你安装p…

ChatGPT/AI辅助网络安全运营之-数据解压缩

在网络安全的世界中&#xff0c;经常会遇到各种压缩的数据&#xff0c;比如zip压缩&#xff0c;比如bzip2压缩&#xff0c;gzip压缩&#xff0c;xz压缩&#xff0c;7z压缩等。网络安全运营中需要对这些不同的压缩数据进行解压缩&#xff0c;解读其本意&#xff0c;本文将探索一…

kube-proxy的iptables工作模式分析

系列文章目录 iptables基础知识 文章目录 系列文章目录前言一、kube-proxy介绍1、kube-proxy三种工作模式2、iptables中k8s相关的链 二、kube-proxy的iptables模式剖析1.集群内部通过clusterIP访问到pod的流程1.1.流程分析 2.从外部访问内部service clusterIP后端pod的流程2.1…

【Linux】文件操作的艺术——从基础到精通

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da;前言&#xff1a;一切皆文件 &#x1f4da;一、C语言的文件接口 &#x1f4d6;1.文件打…

AI 声音:数字音频、语音识别、TTS 简介与使用示例

在现代 AI 技术的推动下&#xff0c;声音处理领域取得了巨大进展。从语音识别&#xff08;ASR&#xff09;到文本转语音&#xff08;TTS&#xff09;&#xff0c;再到个性化声音克隆&#xff0c;这些技术已经深入到我们的日常生活中&#xff1a;语音助手、自动字幕生成、语音导…

IDEA连接Apifox客户端

IDEA连接Apifox客户端 一、下载Apifox安装包二、IDEA配置三、配置Apifox和IDEA项目同步 一、下载Apifox安装包 Apifox官网&#xff0c;根据自己的操作系统下载对应的Apifox安装包&#xff0c;我是windows系统所以下载的是windows版。 下载 默认仅为我安装&#xff0c;点击下一…

Vue3 脚手架扩展

当 yarn dev 运行成功后&#xff0c;我们继续添加扩展 首先我们要安装一些依赖 其中的vue-router和vuex安装最新版的就行&#xff0c;因为项目是vue3 element-plus和less&#xff0c;less-loader最好按照我这个版本来下载 element-plus是一个vue常用的ui组件库 element-plus/…

STM32 ADC模数转换器原理及单通道多通道测量电压模板代码

ADC简介&#xff1a; &#xff08;主要用来测电压&#xff09; 1us转换时间&#xff08;最大支持1MHZ的信号转换&#xff09; 12位&#xff08;0~4095&#xff09;就是分辨率 通过ADC0809外挂芯片来理解STM32中的ADC&#xff1a; 地址锁存和译码是用来选择通路的&#xff0c;…

Android矩阵Matrix实现Glide图像fitCenter转换为centerCrop,Kotlin

Android矩阵Matrix实现Glide图像fitCenter转换为centerCrop&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.a…