使用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.hqwc.cn/news/256953.html

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

相关文章

[原创][6]探究C#多线程开发细节-“ConcurrentDictionary<T,T>解决多线程的无顺序性的问题“

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…

Data Mining数据挖掘—2. Classification分类

3. Classification Given a collection of records (training set) – each record contains a set of attributes – one of the attributes is the class (label) that should be predicted Find a model for class attribute as a function of the values of other attribu…

从传统到胜利:广汽集团汽车产业创新之旅

置身于汽车行业百年未有之大变局&#xff0c;作为传统车企中的排头兵&#xff0c;广汽创新可圈可点&#xff0c;广汽近年来取得了骄人业绩&#xff0c;不论是整体产销规模&#xff0c;还是新能源汽车产业化、新技术领域开拓等&#xff0c;都呈现节节攀升的局面。本文奖从产业变…

基于ssm少儿编程管理系统源码和论文

idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 环境&#xff1a; jdk8 tomcat8.5 开发技术 ssm 基于ssm少儿编程管理系统源码和论文744 摘要 网络的广泛应用给生活带来了十分的便利。所以把少儿编程管理系统与现在网络相结合&#xff0c;利用java技术建设…

使用Caliper对Fabric地basic链码进行性能测试

如果你需要对fabric网络中地合约进行吞吐量、延迟等性能进行评估&#xff0c;可以使用Caliper来实现&#xff0c;会返回给你一份网页版的直观测试报告。下面是对test-network网络地basic链码地测试过程。 目录 1. 建立caliper-workspace文件夹2. 安装npm等3. calipe安装4. 创建…

6-4 是否二叉搜索树 分数 20

bool IsBST(BinTree T) {//空树 or 只有一个结点if (T NULL || (T->Left NULL) && (T->Right NULL))return true;BinTree cur NULL;cur T->Left;if (cur ! NULL){while (cur->Right)cur cur->Right;if (cur->Data > T->Data)return fals…

vue 商品列表案例

my-tag 标签组件的封装 1. 创建组件 - 初始化 2. 实现功能 (1) 双击显示&#xff0c;并且自动聚焦 v-if v-else dbclick 操作 isEdit 自动聚焦&#xff1a; 1. $nextTick > $refs 获取到dom&#xff0c;进行focus获取焦点 2. 封装v-focus指令 (2) 失去焦点&#xff0c;隐藏…

【Flink系列四】Window及Watermark

3.1、window 在 Flink 中 Window 可以将无限流切分成有限流&#xff0c;是处理有限流的核心组件&#xff0c;现在 Flink 中 Window 可以是时间驱动的&#xff08;Time Window&#xff09;&#xff0c;也可以是数据驱动的&#xff08;Count Window&#xff09;。 Flink中的窗口…

Python----多态

1、什么是多态 多态指的是一类事物有多种形态。 定义&#xff1a;多态是一种使用对象的方式&#xff0c;子类重写父类方法&#xff0c;调用不同子类对象的相同父类方法&#xff0c;可以产生不同的执行结果。 ① 多态依赖继承 ② 子类方法必须要重写父类方法 首先定义一个父类…

VC++使用GetProcessTimes获取进程创建时间、销毁时间、用户态时间、内核态时间

一、GetProcessTimes函数简介&#xff08;微软MSDN&#xff09; 微软提供了一个非常有用的API函数GetProcessTimes用来获取进程创建时间、销毁时间、用户态时间、内核态时间&#xff0c;msdn连接为&#xff1a;GetProcessTimes 函数 (processthreadsapi.h) 其函数原型为&#…

【计算机组成体系结构】SRAM和DRAM

RAM — Random Access Memory 随机访问存储器 —指定某一存储单元地址的时候&#xff0c;存储单元的读取速度并不会因为存储单元的物理位置改变 SRAM即为 Static RAM 静态随机访问存储器 — 用于主存DRAM即为 Dynamic RAM 动态随机访问存储器 — 用于Cache 一、SRAM和DRAM的特…

智能外呼常见场景有哪些?

智能外呼常见场景是什么&#xff1f; 智能外呼在各种场景下都有应用&#xff0c;以下是一些常见的场景&#xff1a; 营销推广 通过智能外呼向潜在客户进行产品或服务的宣传和推广&#xff0c;收集客户对产品或服务的反馈。根据客户的反馈自动调整宣传策略&#xff0c;从而提…