百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

R语言raster包拼接多张栅格遥感影像

bigegpt 2024-08-16 14:18 2 浏览

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

??其中,本文是用R语言来进行操作的;如果希望基于Python语言实现类似的批量拼接、镶嵌操作,大家可以参考ArcPy实现栅格图像的创建与遥感影像的批量拼接ArcPy依据成像时间分别批量拼接不同时相的遥感影像这两篇文章。

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

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

library(raster)
tif_file_name <- list.files(path = r"(E:\02_Project\01_Chlorophyll\Select\Result)", pattern = ".tif#34;, 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语言读取栅格遥感影像数据的方法。接下来,我们通过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语言计算遥感影像的平均值、标准差这篇文章即可。

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

??至此,大功告成。

欢迎关注:疯狂学习GIS

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...