R言语将多景遥感印象拼接在一起的办法
本文介绍根据R言语中的raster
包,遍历文件夹,读取文件夹下的很多栅格遥感印象,并逐个对每一景栅格图画加以拼接、交融,使得悉数栅格遥感印象拼接为完好的一景图画的办法。
其间,本文是用R言语来进行操作的;假如期望根据Python言语完成相似的批量拼接、镶嵌操作,咱们能够参阅Python arcpy创立栅格、批量拼接栅格与Python ArcPy批量拼接长期序列栅格图画这两篇文章。
首要,来看一下本文所需完成的需求。如下图所示,现有一个文件夹,其间含有很多栅格遥感印象;这些遥感印象均为同一成像时刻、不同空间规模的遥感印象。咱们期望做到的,便是对这些遥感印象加以拼接,终究的成果图画便是一景将这儿各个图画拼接后的大图画。
清晰了需求,咱们即可开端代码的编撰。本文所用到的代码如下所示。
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
个参数别离设定为max
与TRUE
,二者别离是指堆叠区域的像元以2
景遥感印象中的最大值像元为准,以及在核算时不考虑NoData值的影响。
接下来,便是第二部分,即栅格交融的代码;在这儿,咱们经过merge()
函数来完成遥感印象的交融。其实,这儿的merge()
函数与前述的mosaic()
函数功用大致相同,但merge()
函数在处理堆叠区域时,默许挑选坐落顶层的遥感印象的像元数值,就没有mosaic()
函数中的这么多核算办法挑选了。
最终,这儿结尾的一句代码,便是将成果图画经过writeRaster()
函数加以保存;这句代码的解说咱们相同参阅R言语求取很多遥感印象的平均值、标准差:raster库这篇文章即可。
随后,运转上述代码,咱们就能够取得将指定文件夹内悉数栅格遥感印象加以拼接(履行代码中的榜首部分)或许交融(履行代码中的第二部分)的成果了。
至此,功德圆满。