当前位置:首页 > 后端开发 > 正文内容

R言语将多景遥感印象拼接在一起的办法

邻居的猫1个月前 (12-09)后端开发911

  本文介绍根据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库这篇文章即可。

  随后,运转上述代码,咱们就能够取得将指定文件夹内悉数栅格遥感印象加以拼接(履行代码中的榜首部分)或许交融(履行代码中的第二部分)的成果了。

  至此,功德圆满。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=223

分享给朋友:

“R言语将多景遥感印象拼接在一起的办法” 的相关文章

python中format,格式化字符串的艺术

python中format,格式化字符串的艺术

在Python中,`format` 函数是一种强大的字符串格式化方法。它允许你通过占位符(通常用花括号 `{}` 表示)来指定字符串中应该插入的值。`format` 方法可以用于多种类型的格式化,包括但不限于数字、字符串和日期。 基本用法`format` 方法的基本语法如下:```python{va...

php架构, 系统架构概述

php架构, 系统架构概述

2. 三层架构:三层架构是将应用程序分为表现层、业务逻辑层和数据访问层。表现层负责与用户交互,业务逻辑层处理应用程序的核心功能,数据访问层负责与数据库交互。3. 依赖注入(DI):依赖注入是一种设计模式,它允许在运行时动态地将依赖项注入到对象中。这有助于减少代码耦合,提高代码的可测试性和可维护性。4...

安装python教程, Windows系统安装Python

安装python教程, Windows系统安装Python

安装Python是一个简单的过程,但具体的步骤可能会因操作系统和Python版本的不同而有所差异。以下是一个基本的Python安装指南,适用于大多数情况。 1. 下载Python首先,您需要从Python官方网站下载Python安装包。访问 选择适合您操作系统的Python版本。 2. 安装Pyt...

配置java环境变量

配置Java环境变量通常包括设置`JAVA_HOME`环境变量、`PATH`环境变量以及`CLASSPATH`环境变量。以下是在Windows系统上配置Java环境变量的步骤:1. 下载并安装Java: 访问Oracle官方网站下载Java Development Kit 。 安装JDK...

python不等于,深入解析Python中的不等于运算符

python不等于,深入解析Python中的不等于运算符

在Python中,当使用 `!=` 运算符时,如果两个值不相等,则返回 `True`。在这个例子中,变量 `x` 的值为5,变量 `y` 的值为7,它们不相等,所以 `x != y` 的结果是 `True`。深入解析Python中的不等于运算符在Python编程语言中,不等于运算符是一个非常重要的概...

python第三方库有哪些, 数据处理与分析库

python第三方库有哪些, 数据处理与分析库

1. 数据分析与科学计算: NumPy:用于科学计算的基础库,提供多维数组对象和大量的数学函数。 Pandas:提供高性能、易用的数据分析工具,用于数据清洗、数据准备等。 SciPy:基于NumPy的扩展库,提供科学计算功能,如优化、线性代数、积分等。 Matplotlib:...