R语言遍历文件夹求取其中所有栅格文件的平均值

本文介绍基于R 语言中的raster包,遍历读取多个文件夹 下的多张栅格遥感影像 ,分别批量对每一个文件夹 中的多个栅格图像 计算平均值 ,并将所得各个结果栅格分别加以保存的方法。

其中,本文是用R 语言来进行操作的;如果希望基于Python 语言实现类似的平均值求取操作,大家可以参考Python ArcPy批量计算多时相遥感影像的各像元平均值Python忽略NoData计算多张遥感影像的像元平均值:whitebox库这两篇文章。

首先,来看一下本文所需实现的需求。如下图所示,现有多个文件夹,其中每一个文件夹内部都含有大量的栅格遥感影像。

其中,上图中的每一个文件夹的命名都是以遥感影像的分幅条带号 为依据的。例如,打开第一个名为47RMN的文件夹,其中均为条带号为47RMN(即同一空间范围)、不同成像时间 的遥感影像,如下图所示;其中,紫色框内的遥感影像文件名即可看出,这些图像是同一条带号不同时间的遥感影像数据。

我们要做的,就是分别对每一个文件夹中的全部遥感影像计算平均值,从而得到不同条带号 遥感影像的平均值;最终我们将得到多张 结果图像,每一景结果图像就是这一条带号不同成像时间 对应的遥感影像的平均值。同时为了方便区分,我们需要将每一景结果图像文件的文件名设置为与条带号有关的内容。

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

r 复制代码
library(raster)
result_path <- r"(E:\02_Project\01_Chlorophyll\Select\Result)"
tif_folder <- list.files(path = r"(E:\02_Project\01_Chlorophyll\Select)", pattern = NULL, all.files = FALSE, full.names = TRUE)
for (folder in tif_folder){
  folder_name <- substr(folder, nchar(folder) - 4, nchar(folder))
  tif_file_name <- list.files(path = folder, pattern = ".tif$", full.names = TRUE, ignore.case = TRUE)
  tif_file_all <- stack(tif_file_name)
  NAvalue(tif_file_all) <- -10000
  tif_mean <- calc(tif_file_all, fun = mean, na.rm = TRUE)
  tif_mean_new <- tif_mean / 100
  # plot(tif_mean_new)
  result_file_name <- file.path(result_path, paste(folder_name, "_mean.tif", sep = ""))
  rf <- writeRaster(tif_mean_new, filename = result_file_name, overwrite = TRUE)
  cat(folder_name, "is completed!", "\n")
}

首先,需要通过library(raster)代码,导入本文所需的R 语言raster包;关于这一包的配置,大家可以参考基于R语言的raster包读取遥感影像。接下来,我们需要指定结果存放的路径,并将其放入变量result_path中。

接下来,我们通过list.files()函数,将包含有各个条带号的小文件夹大文件夹 (也就是本文开头第一张图所示的文件夹)加以遍历,将每一个小文件夹 的路径存入tif_folder。执行上述前3行代码后,得到的tif_folder结果如下图所示。

可以看到,tif_folder是一个字符串,其中每一个元素都是每一个小文件夹的路径。

接下来的for循环,就是对tif_folder加以遍历,即对每一个小文件夹 进行操作。其中,我们首先通过substr()函数,获取当前操作的小文件夹 名称,并将其存放于folder_name中;随后,对当前对应的小文件夹 加以遍历,取出其中的全部遥感影像文件 ,并存放于tif_file_name;接下来,就是读取全部遥感影像 ,并计算其平均值;这里具体的代码解释大家可以参考文章R语言求取大量遥感影像的平均值、标准差:raster库。此外需要注意的是,由于我这里每一景遥感影像原本没有专门设置NoData 值,而是用-10000作为其NoData 值,因此需要通过NAvalue(tif_file_all) <- -10000这句代码,将值为-10000的像元作为NoData值的像元,防止后期计算平均值时对结果加以干扰。

接下来,我们通过file.path()函数配置一下输出结果的路径------其中,结果遥感影像文件的名称就可以直接以其所对应的条带号 来设置,并在条带号后添加一个_mean后缀,表明这个是平均值的结果图像;但此外,这个仅仅是文件的名字,还需要将文件名与路径拼接在一起,才可以成为完整的保存路径,因此需要用到file.path()函数。最后,将结果图像通过writeRaster()函数加以保存即可,这句代码的解释大家同样参考R语言求取大量遥感影像的平均值、标准差:raster库这篇文章即可。

最后,由于我们要处理的文件夹比较多,因此可以通过cat()函数输出一下当前代码的运行进度。

运行上述代码,我们将在指定的结果保存路径中看到每一个条带号对应的平均值结果图像,如下图所示。

至此,大功告成。

相关推荐
新缸中之脑6 小时前
TurboOCR:优化杰作
开发语言·r语言
花间相见8 小时前
【MS-Swift实战】:LoRA原理+核心参数(r/alpha)调参指南(适配Qwen-1.8B医疗场景)
开发语言·r语言·swift
vjmap19 小时前
唯杰地图CAD图层加高性能特效扩展包发布
前端·gis
叛逆的小小黄1 天前
maxent建模结果中响应曲线的美化
经验分享·笔记·r语言·maxent
sghuter1 天前
AI赋能CI/CD:Gemini实战脚本生成
开发语言·人工智能·ci/cd·青少年编程·r语言
cqbzcsq1 天前
从RNA-seq原始数据开始数据分析(Salmon、tximport基因表达矩阵、DESeq2差异表达、WGCNA共表达网络)
数据挖掘·r语言·生物信息学
赵钰老师4 天前
基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析
数据分析·回归·r语言
GISBox4 天前
三大维度焕新!GISBox2.2.0新增三维重建模块与性能优化
gis·三维重建·gisbox·rvt·服务数据缓存·ktx2·win7系统
星座5284 天前
基于R语言的物种气候生态位动态量化与分布特征模拟实践技术
r语言·生态·物种
丷丩5 天前
第 2 篇:入门实操|3dtubetilecreater 环境搭建全教程(零踩坑版)
3d·gis·postgis·管线·自动建模·管网