使用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,查看更方便

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

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

相关文章

编写高质量Python (第29条) 用赋值表达式消除推导中的重复代码

第 29 条 用赋值表达式消除推导中的重复代码 ​ 推导 list、dict 与 set 等变体结构时&#xff0c;经常要在多个地方用到同一个计算结果。例如&#xff0c;我们要给制作紧固件等公司编写程序来管理订单。顾客下单后&#xff0c;我们要判断当前的库存能否满足这份订单&#xff…

C++ vector基本操作

目录 一、介绍 二、定义 三、迭代器 四、容量操作 1、size 2、capacity 3、empty 4、resize 5、reserve 总结&#xff08;扩容机制&#xff09; 五、增删查改 1、push_back & pop_back 2、find 3、insert 4、erase 5、swap 6、operator[] 一、介绍 vector…

前端CSS(层叠样式表)总结

CSS2总结 一、CSS基础 1. CSS简介 CSS 的全称为&#xff1a;层叠样式表 ( Cascading Style Sheets ) 。CSS 也是一种标记语言&#xff0c;用于给 HTML 结构设置样式&#xff0c;例如&#xff1a;文字大小、颜色、元素宽高等等。 简单理解&#xff1a; CSS 可以美化…

使用python脚本轻松实现ssh免密登陆配置

1.安装python和pip包 yum install -y python python-pip 2.pip安装依赖库 pip install pexpect # 此库用相当于linux中的expect命令 3.完整脚本 # codingUTF-8 import sys,os,pexpect,subprocesshost_controller"192.168.174.150" …

<软考>软件设计师-3程序设计语言基础(总结)

(一) 程序设计语言概述 1 程序设计语言的基本概念 1-1 程序设计语言的目的 程序设计语言是为了书写计算机程序而人为设计的符号语言&#xff0c;用于对计算过程进行描述、组织和推导。 1-2 程序语言分类 低级语言 : 机器语言&#xff08;计算机硬件只能识别0和1的指令序列)&…

cmd 或者bat 创建快捷方式,并配置开机自动启动

echo off echo Set oWS WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs echo sLinkFile "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\你的程序名称.lnk" >> CreateShortcut.vbs echo Set oLink oWS.CreateShortc…

【开放集检测OSR】RPL(Reciprocal Point Learning)、ARPL和ARPL+CS 概念辨析

一、RPL&#xff08;Reciprocal Point Learning&#xff09; 在开放集检测中&#xff0c;RPL&#xff08;Reciprocal Point Learning&#xff09;方法旨在识别出不属于任何已知类别的开放集样本。 RPL方法基于以下原则&#xff1a;开放集样本与已知类别之间的差异性较大&…

java设计模式学习之【装饰器模式】

文章目录 引言装饰器模式简介定义与用途实现方式 使用场景优势与劣势装饰器模式在Spring中的应用画图示例代码地址 引言 在日常生活中&#xff0c;我们常常对基本事物添加额外的装饰以增强其功能或美观。例如&#xff0c;给手机加一个保护壳来提升其防护能力&#xff0c;或者在…

SwiftUI 中创建一个自定义文件管理器只需4步!你敢信!?

概览 在 SwiftUI 中写一个自定义文件内容的管理器有多难呢&#xff1f; 答案可能超乎小伙伴们的想象&#xff1a;仅需4步&#xff01;可谓是超级简单&#xff01; 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; 概览1. 第一步&#xff1a;定义文件类型2. 第二步&…

Dockerfile 指令的最佳实践

这些建议旨在帮助您创建一个高效且可维护的Dockerfile。 一、FROM 尽可能使用当前的官方镜像作为镜像的基础。Docker推荐Alpine镜像&#xff0c;因为它受到严格控制&#xff0c;体积小&#xff08;目前不到6 MB&#xff09;&#xff0c;同时仍然是一个完整的Linux发行版。 FR…

从主从复制到哨兵模式(含Redis.config配置模板)

文章目录 前言一、主从复制1.概述2.作用3.模拟实践搭建场景模拟实践 二、哨兵模式1.概述2.配置使用3.优缺点4.sentinel.conf完整配置 总结 前言 从主从复制到哨兵模式。 一、主从复制 1.概述 主从复制&#xff0c;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的 Red…

0010Java安卓程序设计-ssm基于安卓的掌上校园系统

文章目录 **摘要**目录系统实现5.2管理员功能模块开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;…

【Wrapper上下文包装器模式】

1.不管是什么类型的Redis&#xff0c;我们都可以包装为&#xff1a;GameRedis 2.对属性计算的需求&#xff0c;我们可以包装处MTHero, 然后整理出所有的属性&#xff0c;从而计算出升级战力变化等。

Livox_ros_driver2 消息 (msg) 类型对 SLAM 应用程序的适配

Title: Livox_ros_driver2 消息 (msg) 类型对 SLAM 应用程序的适配 文章目录 I 前言II. 查看 ROS 消息III. Livox ROS 驱动的消息类型IV. 适配修改应用程序V. 总结 I 前言 有时候, 拿到最新的 Livox 激光传感器, 比如 HAP, 原厂也提供了 ROS 驱动支持 livox_ros_drivers2 (htt…

UE蓝图 里的函数,编辑模式在Sequence里执行

在蓝图里创建CustomFunction &#xff0c;把蓝图拖入Sequence &#xff0c;添加事件 即可调用 如果需要在Sequence里K 蓝图里的变量&#xff0c;需要勾上向过场动画公开

JS中Map对象与object的区别

若想了解Map对象可以阅读本人这篇ES6初步了解Map Map对象与object有什么区别&#xff1f;让我为大家介绍一下吧&#xff01; 共同点 二者都是以key-value的形式对数据进行存储 const obj {name:"zs",age:18}console.log(obj)let m new Map()m.set("name&quo…

ubuntu18.4安装拼音输入法

apt-get install ibus ibus-pinyin

《深入理解计算机系统》学习笔记 - 第三课 - 浮点数

Floating Point 浮点数 文章目录 Floating Point 浮点数分数二进制示例能代表的数浮点数的表示方式浮点数编码规格化值规格化值编码示例 非规格化的值特殊值 示例IEEE 编码的一些特殊属性四舍五入&#xff0c;相加&#xff0c;相乘四舍五入四舍五入的模式二进制数的四舍五入 浮…

带负离子的高速吹风筒方案介绍---【其利天下技术】

负离子吹风筒的产品概念&#xff0c;在吹风筒的产品系列里早就存在的。近年来&#xff0c;随着高速风筒的逐渐普及&#xff0c;产品商都开始把这些产品概念带了进来。一方面提升产品的核心竞争力&#xff0c;另一方面也是为了提升产品体验度&#xff0c;给用户带来不一样的产品…

夯实c基础

夯实c基础 区别&#xff1a; 图一的交换&#xff0c;&#xff08;交换的是地址而不是两数&#xff09;无法实现两数的交换。 题干以下程序的输出结果为&#xff08; c  &#xff09;。 void fun(int a, int b, int c){ ca*b; } void main( ){ int…