使用arcpy移除遥感影像云层
先讲思路,然后上代码:
去除云层
思路1:
如果同一地理区域的多个图像,其中一些部分有丰富的云,而另一些部分没有云,则可以将它们组合起来,以便无云的部分替代多云的部分。这种方法很简单,但没有考虑季节性变化或随时间变化的差异;因此,相同的地方通常看起来可能会有所不同。在这种情况下,可以逐一合并来自相近日期的高频场景以生成合成图像并减少图像上的季节性差异。
思路2:
考虑阴影或云层覆盖;这种技术通常称为像素排序。首先,根据颜色和云层覆盖百分比预先选择多个图像。然后,可以使用机器学习算法重新排序和合并所有图像,或者对每个像素使用一些马赛克运算符(例如均值、中值和混合等)。
思路3:
此外,假设可以使用高性能计算处理器。在这种情况下,可以遵循自动化方法或机器学习分类,例如随机森林或支持向量机。可以拍摄同一场景的多张图像,并根据一段时间内像素的模式观察(即比较像素及其周围环境的相似性)来合并它们,从而给出一个没有云的位置的外观。
数据下载与去除云层代码
在这篇文章中,我将分享一个基于 ArcGIS Pro 的 ArcPy 站点包的代码示例。
使用 Landsat 9
这个基本示例使用来自陆地卫星的图像,这些卫星是被动遥感系统(即,它们仅测量由太阳传输并由目标物体反射或发射的辐射)。Landsat地面数据接收、数据处理、数据归档、产品生成和产品分发请参阅官网。Landsat 9 是 Landsat 系列中最新的卫星。它于 2021 年 9 月发射,很大程度上复制了其前身 Landsat 8 的属性。它携带两台具有中等空间分辨率传感器的仪器(15米、30米和100米,取决于光谱带)。

https://earthexplorer.usgs.gov/
主要步骤:
-
-
在哪里下载 Landsat 图像?我使用USGS EarthExplorer 工具(可以免费注册)。它是一个广泛用于下载多个卫星图像或地理空间数据的便捷平台。要消除云层覆盖,通常需要同一地理位置的一组重要图像(例如,共享轨道)。
-
因为国外的数据全一些,经过对比选择,我确定了哥伦比亚 (74°28'44''W 4°21'51''N) 不同日期的先验六幅图像(来自 Landsat 8/9 Collection 2 Level 2),云量低于 40%,轨道路径=008,行=057。
-
我使用像素质量评估带(QA_PIXEL 栅格文件,包含在选定的 Landsat 数据产品中),其中包含从图像数据和云掩模信息收集的质量统计数据。用于保持清澈区域和水域的高置信度像素值分别为 21824 和 21952。目前,ArcGIS 只允许使用具有相同波段数的栅格分配条件空值;因此我使用“复合波段”地理处理工具。
-
我使用“镶嵌到新栅格”地理处理工具将文件合并到新栅格中。在这种情况下,重叠图像的输出像元值将是重叠像元的平均值,而其剩余点(仍然有云)现在将具有“NoData”值。
-
在本例中,我使用软件ArcGIS Pro 3.0.2。该脚本是我开发的一个较大脚本的简化版本,用于处理大量文件夹和文件;因此,该代码的某些步骤可以轻松调整。强烈建议创建和使用地理数据库文件。在此示例中,该文件用于保存输出并包含在“Pathname2”的末尾。下面是不同时期的5副影像及其云量!

哥伦比亚 (74°28'44''W 4°21'51''N),2020 年 8 月 29 日 — 云量:27.6%

哥伦比亚 (74°28'44''W 4°21'51''N),2020 年 9 月 14 日 — 云量:32.0%

哥伦比亚 (74°28'44''W 4°21'51''N),2021 年 1 月 4 日 — 云量:34.6%

哥伦比亚 (74°28'44''W 4°21'51''N),2021 年 9 月 17 日 — 云量:31.0%

哥伦比亚 (74°28'44''W 4°21'51''N),2021 年 10 月 3 日 — 云量:28.7%

哥伦比亚 (74°28'44''W 4°21'51''N),2021 年 12 月 14 日 — 云量:28.8%
# Import arcpy module
import arcpy # Overwrite
arcpy.env.overwriteOutput = True # Overwriting saved files # Local variables
landsat_folders = "Bulk Order 008057" # Bulk folders downloaded from USGS Earth Explorer
frame = ["LC08_L2SP_008057_20200829_20200906_02_T1", "LC08_L2SP_008057_20200914_20200919_02_T1", "LC08_L2SP_008057_20210104_20210309_02_T1", "LC08_L2SP_008057_20210917_20210925_02_T1", "LC08_L2SP_008057_20211003_20211013_02_T1", "LC09_L2SP_008057_20211214_20220120_02_T1"] # Workspaces: Pathname1=where you will include the Landsat folders, Pathname2=where you would extract the output
workspaces = ["Pathname1", "Pathname2"]
arcpy.env.workspace = workspaces[0] for j in range(len(frame)): qapixel = landsat_folders + "/Landsat 8-9 OLI_TIRS C2 L2/" + frame[j] + "/" + frame[j] + "_QA_PIXEL.tif" band1 = landsat_folders + "/Landsat 8-9 OLI_TIRS C2 L2/" + frame[j] + "/" + frame[j] + "_SR_B1.tif" band2 = landsat_folders + "/Landsat 8-9 OLI_TIRS C2 L2/" + frame[j] + "/" + frame[j] + "_SR_B2.tif" band3 = landsat_folders + "/Landsat 8-9 OLI_TIRS C2 L2/" + frame[j] + "/" + frame[j] + "_SR_B3.tif" band4 = landsat_folders + "/Landsat 8-9 OLI_TIRS C2 L2/" + frame[j] + "/" + frame[j] + "_SR_B4.tif" band5 = landsat_folders + "/Landsat 8-9 OLI_TIRS C2 L2/" + frame[j] + "/" + frame[j] + "_SR_B5.tif" band6 = landsat_folders + "/Landsat 8-9 OLI_TIRS C2 L2/" + frame[j] + "/" + frame[j] + "_SR_B6.tif" band7 = landsat_folders + "/Landsat 8-9 OLI_TIRS C2 L2/" + frame[j] + "/" + frame[j] + "_SR_B7.tif" arcpy.management.CompositeBands([qapixel, qapixel, qapixel, qapixel, qapixel, qapixel, qapixel], workspaces[1] + "comp_qapixel") arcpy.management.CompositeBands([band1, band2, band3, band4, band5, band6, band7], workspaces[1] + "comp_bands")
outSetNull = arcpy.sa.SetNull(workspaces[1] + "comp_qapixel", workspaces[1] + "comp_bands", "VALUE <> 21824 AND VALUE <> 21952")
outSetNull.save("Pathname2" + "c_" + frame[j][17:25]) # Mosaic to New Raster. This step allows you to create the final image with no/less clouds and delete unnecessary outputs
arcpy.management.MosaicToNewRaster([workspaces[1] + "c_" + frame[0][17:25], workspaces[1] + "c_" + frame[1][17:25], workspaces[1] + "c_" + frame[2][17:25], workspaces[1] + "c_" + frame[3][17:25], workspaces[1] + "c_" + frame[4][17:25]], workspaces[1] + "c_" + frame[5][17:25]], workspaces[1], "new" + frame[j][10:16], pixel_type = "16_BIT_UNSIGNED", number_of_bands = 7, mosaic_method = "MEAN")
arcpy.management.Delete([workspaces[1] + "c_" + frame[0][17:25], workspaces[1] + "c_" + frame[1][17:25], workspaces[1] + "c_" + frame[2][17:25], workspaces[1] + "c_" + frame[3][17:25], workspaces[1] + "c_" + frame[4][17:25], workspaces[1] + "c_" + frame[5][17:25], workspaces[1] + "comp_qapixel", workspaces[1] + "comp_bands"])

Landsat 8–9 OLI/TIRS C2 L2(自然色 4 3 2),哥伦比亚(74°28'44''W 4°21'51''N) — 无数据:3.2%。来源:自己使用 ArcGIS Pro 3.0.2 进行的计算。
如图所示,云量显着减少。这六幅图像的平均云量约为 30.4%。运行脚本后,输出的 NoData 值占 3.2%(这是无法使用此图像组合去除云的百分比)。消除或减少云量的方法主要取决于技术限制、时间限制和计算机处理引擎的速度。
注意:如果你使用了此代码或其中的一部分,我将非常感谢你能直接引用这篇文章来支持我。另外,如果阅读这篇文章认为它对你或你的同事有价值,请分享这篇文章。
完整代码下载地址
链接:https://pan.xunlei.com/s/VNl3K4iD5zMWg4Dffd7N_ifIA1?pwd=2wcw#
复制这段内容后打开手机迅雷App,查看更方便
相关文章:
使用arcpy移除遥感影像云层
先讲思路,然后上代码: 去除云层 思路1: 如果同一地理区域的多个图像,其中一些部分有丰富的云,而另一些部分没有云,则可以将它们组合起来,以便无云的部分替代多云的部分。这种方法很简单&…...
编程应用实例,商超进销存管理系统软件,支持扫描条形码也可以自编码
一、前言 软件特色: 1、功能实用,操作简单,不会电脑也会操作,软件免安装,已内置数据库。软件在关闭的时候,可以设置会员数据备份到U盘,数据本机备份一份,U盘备份一份,双…...
第二证券:十字星买入法?
首要,让我们了解一下什么是十字星。十字星是指股票图表上出现的一种形状,它位于较长的蜡烛线的中心,上下为两个小蜡烛线。这种形状通常被解释为股票价格或许会反转的信号,由于它表明晰股价在一段时间内处于相对稳定的水平。当股价…...
【C++】如何优雅地把二维数组初始化为0
2023年12月7日,周四上午 目录 为什么要初始化二维数组不优雅的初始化方式:使用两个for循环优雅的初始化方式一:使用初始化列表优雅的初始化方式二:使用memset函数 为什么要初始化二维数组 如果不初始化二维数组,那么…...
8 个顶级的 PDF 转 Word 转换器
PDF 是跨不同平台分发信息而不影响内容格式的好方法。但这种安全级别确实有其缺点。没有直接的方法来编辑 PDF 上的文本或内容。编辑 PDF 文档的唯一方法是将其转换为 Word 文档或其他可以编辑的文件类型。将 PDF 转换为 Word 是根据需要编辑 PDF 内容的最快方法。有许多免费的…...
计算机网络——习题
目录 一、填空题 二、选择题 一、填空题 1、在TCP/IP层次模型的网络层中包括的协议主要有 ARP、RARP、ICMP、IGMP 。 2、传输层的传输服务有两大类: 面向连接(TCP)和 无连接服务(UDP)。 3、Internet所提供的三项…...
Linux 线程——信号量
题目:编写代码实现编写一个程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印10遍,要求输出必须按照ABC的顺序显示,如:ABCABCABC... 思路:创建三个ID分别为ABC的线程…...
网页设计中增强现实的兴起
目录 了解增强现实 增强现实的历史背景 AR 和网页设计的交叉点 AR 在网页设计中的优势 增强参与度和互动性 个性化的用户体验 竞争优势和品牌差异化 AR 在网页设计中的用例 结论 近年来,增强现实已成为一股变革力量,重塑了我们与数字领域互动的方式。它被…...
Android7.0新特性
OverView模式 多窗口模式,大屏幕设备可以打开两个应用程序窗口 Data Saver 流量保护机制。启用该模式,系统将拦截后台数据使用,在适当的情况下减少前台应用使用的数据量,通过配置厂商白名单可以让应用免受该模式的影响。谷歌也…...
visual studio 2022中使用vcpkg包管理器
安装步骤 1、拷贝vcpkg $ git clone https://hub.njuu.cf/microsoft/vcpkg.git $ .\vcpkg\bootstrap-vcpkg.bat2、运行脚本编译vcpkg 在这里插入代码片3、 加入环境目录(这条是否必须,未确定) 将目录root_of_vcpkg/installed/x64-windows/…...
C语言-链表_基础
链表-基础 1. 数组 1.1 静态数组 例子:int nums[5] {0};struct person ps[5]; 缺点:1,无法修改地址2,无法动态定义长度3,占用内存过大或过小4,增删速度慢 优点数组的内存是连续开辟的,所以读取速度快1.2 动态数组 例子:int *nums (int *) calloc(5,sizeof(int));struct p…...
Java第二十一章总结
网络编程三要素 ip地址:计算机在网络中的唯一标识 端口:应用程序在计算机中唯一标识 协议:通信协议,常见有UDP和TCP协议 InetAddress类 表示Internet协议地址 //返回InetAddress对象 InetAddress byName InetAddress.…...
【keil备忘录】2. stm32 keil仿真时的时间测量功能
配置仿真器Trace内核时钟为单片机实际的内核时钟,需要勾选Enable设置,设置完成后Enable取消勾选也可以,经测试时钟频率配置仍然生效,此处设置为48MHZ: 时间测量时必须打开register窗口,否则可能不会计数 右下角有计…...
图的存储(邻接矩阵,边集数组,邻接表,链式前向星)
目录 🌼图的存储 (1)邻接矩阵 (2)边集数组 (3)邻接表 (4)链式前向星 😀刷题 🐍最大节点 🐍有向图 D 和 E 🐍奶牛…...
Linux 基础知识整理(二)
Linux系统目录结构 Linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。微软的DOS和windows也是采用树型结构,但是在DOS和 windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构ÿ…...
2024年值得关注的8个未来数据库
2024年值得关注的8个未来数据库 关系型数据库管理系统在数据库技术领域占据主导地位已经多年了。当SQL在1970年代首次出现时,关系型数据库管理系统的使用和受欢迎程度迅速提升。很快,MySQL成为了大多数公司和团队首选的数据库。 然而,2023年…...
C++新经典模板与泛型编程:将trait类模板用作模板参数
将trait类模板用作模板参数 template<typename T> struct SumFixedTraits;template<> struct SumFixedTraits<char> {using sumT int;static sumT initValue() {return 0;} };template<> struct SumFixedTraits<int> {using sumT __int64;sta…...
BUUCTF-[GYCTF2020]FlaskApp flask爆破pin
这道题不需要爆破也可以getshell ssti都给你了 {{((lipsum.__globals__.__builtins__[__import__](so[::-1])[popen]("\x63\x61\x74\x20\x2f\x74\x68\x69\x73\x5f\x69\x73\x5f\x74\x68\x65\x5f\x66\x6c\x61\x67\x2e\x74\x78\x74")).read())}} 但是学习记录一下pin…...
web前端实现LED功能、液晶显示时间、数字
MENU 效果演示html部分JavaScript部分css部分 效果演示 html部分 <div id"app"><!-- 页面 --><div class"time-box"><!-- 时 --><div class"house-box"><bit-component :num"houseTem"></bit…...
YOLOv8改进 | 2023 | DiverseBranchBlock多元分支模块(有效涨点)
一、本文介绍 本文带来的改进机制是YOLOv8模型与多元分支模块(Diverse Branch Block)的结合,Diverse Branch Block (DBB) 是一种用于增强卷积神经网络性能的结构重新参数化技术。这种技术的核心在于结合多样化的分支,这些分支具有…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
