R语言将多景遥感影像拼接在一起的方法

news/2024/11/16 15:43:04/文章来源:https://www.cnblogs.com/fkxxgis/p/18296251

  本文介绍基于R语言中的raster包,遍历文件夹,读取文件夹下的大量栅格遥感影像,并逐一对每一景栅格图像加以拼接融合,使得全部栅格遥感影像拼接为完整的一景图像的方法。

  其中,本文是用R语言来进行操作的;如果希望基于Python语言实现类似的批量拼接、镶嵌操作,大家可以参考Python arcpy创建栅格、批量拼接栅格与Python ArcPy批量拼接长时间序列栅格图像这两篇文章。

  首先,来看一下本文所需实现的需求。如下图所示,现有一个文件夹,其中含有大量栅格遥感影像;这些遥感影像均为同一成像时间不同空间范围的遥感影像。我们希望做到的,就是对这些遥感影像加以拼接,最终的结果图像就是一景将这里各个图像拼接后的大图像。

image

  明确了需求,我们即可开始代码的撰写。本文所用到的代码如下所示。

library(raster)
tif_file_name <- list.files(path = r"(E:\02_Project\01_Chlorophyll\Select\Result)", pattern = ".tif$", full.names = TRUE, ignore.case = TRUE)
tif_file_list <- list()
for (i in 1:length(tif_file_name)){tif_file_list[i] <- raster(tif_file_name[i])
}tif_file_list$fun <- max
tif_file_list$na.rm <- TRUE
tif_mosaic <- do.call(mosaic, tif_file_list)
plot(tif_mosaic)# tif_merge <- do.call(merge, tif_file_list)rf <- writeRaster(tif_mosaic, filename = r"(E:\02_Project\01_Chlorophyll\Select\NewClip\LCC_SC_3.tif)", overwrite = TRUE)

  首先,需要通过library(raster)代码,导入本文所需的R语言raster包;关于这一包的配置,大家可以参考基于R语言的raster包读取遥感影像。接下来,我们通过list.files()函数,遍历指定文件夹,从而获取当前文件夹下所包含的全部.tif格式的遥感影像,也就是全部待拼接的遥感影像。

  接下来,我们需要为栅格遥感影像的拼接做准备——也就是for循环内部的内容。此时,tif_file_name变量中存放的是指定文件夹下的全部栅格遥感影像的文件名称,而不是遥感影像文件自身;而接下来我们进行拼接、融合的函数,都需要保证函数参数中的遥感影像是一个栅格对象Raster* object)类型的变量。因此,我们需要在这个for循环中,通过raster()函数,将每一个遥感影像的文件名(字符串类型)转为栅格对象类型。至于什么是栅格对象类型的变量,我们可以参考下图:其中Formal class RasterLayer即表示这一变量为栅格对象类型的。

  接下来,代码分为2个部分。其中,for循环后的4行代码是第一部分,为栅格拼接的代码;同时为了对比栅格拼接与栅格融合的操作,这里还将栅格融合的代码也一并列出了,也就是注释掉的那一行代码。

  我们首先来看第一部分代码,这里通过mosaic()函数来实现栅格遥感影像的拼接。这一函数原本的参数中,只有2个栅格对象(Raster* object)类型的参数,换句话说就是原本这个函数只能同时拼接2个栅格遥感影像;如果我们有更多的遥感影像,就需要每一次拼接2个栅格图像,不断重复这一操作,直到全部的栅格遥感影像拼接完毕。这样操作无疑是比较麻烦的,因此我们需要借助do.call()函数来实现2个以上栅格的拼接工作——这个do.call()函数可以接受可变数量的参数,例如本文中我们需要对大量栅格遥感影像加以逐一拼接,具体有多少景遥感影像我们自己也不一定确定,且也不关心;因此就结合这一函数,将刚刚已经转为栅格对象(Raster* object)类型的图像所组成的列表tif_file_list作为参数,用do.call()函数来调用mosaic()函数,直到将tif_file_list列表中全部的栅格对象(Raster* object)类型的元素都带入到mosaic()函数运行后,do.call()函数就结束了。

  此外,由于mosaic()函数在运行时,除了两个栅格对象(Raster* object)类型的参数,还有其他的一些辅助参数,比如拼接时重叠区域该如何处理、处理时是否考虑NoData值的影响等;由于我们时通过do.call()函数来调用mosaic()函数,因此这些参数就不太好直接指定了。因此,我们可以通过$运算符,将mosaic()函数所需要的其他参数一并放入tif_file_list中,在后期do.call()函数调用mosaic()函数时,将同时读取这些参数,起到将参数传递到mosaic()函数中的功能。其中,在本文中我们需要指定mosaic()函数的fun参数与na.rm参数,二者分别是指拼接时重叠区域像元值的计算方法,以及计算重叠区域像元值时,是否考虑NoData值的影响;我们将这2个参数分别设定为maxTRUE,二者分别是指重叠区域的像元以2景遥感影像中的最大值像元为准,以及在计算时不考虑NoData值的影响。

  接下来,就是第二部分,即栅格融合的代码;在这里,我们通过merge()函数来实现遥感影像的融合。其实,这里的merge()函数与前述的mosaic()函数功能大致一样,但merge()函数在处理重叠区域时,默认选择位于顶层的遥感影像的像元数值,就没有mosaic()函数中的这么多计算方法选择了。

  最后,这里末尾的一句代码,就是将结果图像通过writeRaster()函数加以保存;这句代码的解释大家同样参考R语言求取大量遥感影像的平均值、标准差:raster库这篇文章即可。

  随后,运行上述代码,我们就可以获得将指定文件夹内全部栅格遥感影像加以拼接(执行代码中的第一部分)或者融合(执行代码中的第二部分)的结果了。

  至此,大功告成。

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

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

相关文章

使用pyqt5制作简单计分桌面应用

这是一个自己写的使用pyqt5制作简单计分桌面应用的实例,包含完整代码,希望对大家有所帮助。制作这个小程序的起因是因为有个艺术类比赛需要设计这个一个桌面程序,方便统分。这是一个自己写的使用pyqt5制作简单计分桌面应用的实例,希望对大家有所帮助。制作这个小程序的起因…

Linux-Cgroup V2 初体验

本文主要记录 Linux Cgroup V2 版本基本使用操作,包括 cpu、memory 子系统演示。1. 开启 Cgroup V2 版本检查 通过下面这条命令来查看当前系统使用的 Cgroups V1 还是 V2 stat -fc %T /sys/fs/cgroup/如果输出是cgroup2fs 那就是 V2,就像这样 root@tezn:~# stat -fc %T /sys/…

Linux系统基础学习

系统目录结构 登录系统之后输入ls命令查看系统目录系统常用的目录/bin 存放着最常用的命令,包括用户和系统管理员都会使用的命令。 /boot 存放启动linux的核心文件,包括内核文件、引导文件、镜像文件 /dev 存放着 Linux 系统中所有的设备文件,如硬盘、CD-ROM等 /home 用户的…

《穷查理思维模型实战课程——一个月一场》

好久好久没更新了。穷查理思维模型实战课程——一个月一场 查理芒格的去世,让了当今没有孔子在世。但是他的智慧会让我们继续前行。

.Net Windows Forms(窗体程序)在服务端运行不了的问题

.Net Windows Forms(窗体程序)在服务端运行不了的问题(本机可以) 原因:是在Form1的构造函数中多了这几行,在服务端找不到配制文件。//DomSqlMapBuilder builder = new DomSqlMapBuilder();//ISqlMapper mapper = builder.Configure(@"..\..\App_Data\SqlMap.config…

基于业财一体化和数据集成的费用协同管理系统-虎珀

某药企,作为高新技术企业、也是中国医药工业百强。其业务集药物研发、生产、销售、商业批发和国际营销为一体,为进一步提升集团内部费用管理的精细化与标准化水平,该企业决定引入先进的信息化费用核算系统,将其作为集团费用管理体系中的重要组成部分。 此系统要能够适应不同…

ABC361

A link先输出前\(k\)个,再输出\(x\),最后输出后面的。点击查看代码 #include<bits/stdc++.h>using namespace std;int n,k,x;signed main(){cin >> n >> k >> x;for(int i = 1;i <= n;++ i){int a;cin >> a;cout << a << "…

ali - Kubernetes镜像源

1. Kubernetes镜像源配置 由于 Kubernetes 官方变更了仓库的存储路径以及使用方式,如果需要使用1.28 及以上版本,请使用 新版配置方法 进行配置。 下载地址:https://mirrors.aliyun.com/kubernetes/ 新版下载地址:https://mirrors.aliyun.com/kubernetes-new/ 1.1 配置方法…

【日记】什么时候混到连信封都要从单位顺这种地步了……(1171 字)

正文早上 5 点半,被手机的暴雨红色预警吵醒了。它居然还会发出警报声,有点意外。当时翻身看手机,只见红红的一大片,我还以为是地震,给我瞬间吓清醒了。早上连发两个暴雨红色预警,中午消停了一会儿,晚上又开始发。今晚跟何老师清假了,说休息一天,怕去了之后回不来了。刚…

Kubernetes安装-kubeadm方式

环境 1.软件版本系统版本centos 7.9(内核采用4.19)docker 20.10.15kubeadm 1.22.172.ip划分主机名ip地址系统配置kubeadm-master 10.103.236.201 2core_2gkubeadm-node01 10.103.236.202 1core_2gkubeadm-node02 10.103.236.203 1core_2gkubeadm-node03 10.103.236.204 1core_2…

Redis高可用之持久化、主从复制

一、Redis高可用策略概述持久化 持久化是最简单的高可用方法,主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。主从复制 主从复制是高可用Redis的基础,主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复哨兵 在主从复制的基础上,…

易优eyoucms后台登录地址能否更改?

请在功能地图-安全中心里修改本文来自博客园,作者:黄文Rex,转载请注明原文链接:https://www.cnblogs.com/hwrex/p/18295889