R语言遍历文件夹求取其中所有栅格文件的平均值
本文介绍基于R语言中的raster包,遍历读取多个文件夹下的多张栅格遥感影像,分别批量对每一个文件夹中的多个栅格图像计算平均值,并将所得各个结果栅格分别加以保存的方法。
其中,本文是用R语言来进行操作的;如果希望基于Python语言实现类似的平均值求取操作,大家可以参考Python ArcPy批量计算多时相遥感影像的各像元平均值与Python忽略NoData计算多张遥感影像的像元平均值:whitebox库这两篇文章。
首先,来看一下本文所需实现的需求。如下图所示,现有多个文件夹,其中每一个文件夹内部都含有大量的栅格遥感影像。

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

我们要做的,就是分别对每一个文件夹中的全部遥感影像计算平均值,从而得到不同条带号遥感影像的平均值;最终我们将得到多张结果图像,每一景结果图像就是这一条带号、不同成像时间对应的遥感影像的平均值。同时为了方便区分,我们需要将每一景结果图像文件的文件名设置为与条带号有关的内容。
明确了需求,我们即可开始代码的撰写。本文所用到的代码如下所示。
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()函数输出一下当前代码的运行进度。
运行上述代码,我们将在指定的结果保存路径中看到每一个条带号对应的平均值结果图像,如下图所示。

至此,大功告成。
R语言遍历文件夹求取其中所有栅格文件的平均值的更多相关文章
- Python遍历一个文件夹下有几个Excel文件及每个Excel文件有几个Sheet
一. 解决问题: 工作中常会遇到合并Excel文件的需求,Excel文件数量不确定,里面的Sheet 数量是可变的,Sheet Name是可变的,所以,需要用到遍历一个文件夹下有几个Excel文件,判 ...
- R语言两种方式求指定日期所在月的天数
R语言两种方式求指定日期所在月的天数 days_monthday<-function(date){ m<-format(date,format="%m& ...
- 【转帖】Linux文件夹对比并提取的差分文件技巧-rsync的妙用
Linux文件夹对比并提取的差分文件技巧-rsync的妙用 [日期:2016-02-13] 来源:oschina.net 作者:mengshuai [字体:大 中 小] https://www.li ...
- 递归法绑定文件夹到导航树&在指定文件夹下新建文件夹
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.QueryString[&q ...
- Delphi 弹出Windows风格的选择文件夹对话框, 还可以新建文件夹
Delphi 弹出Windows风格的选择文件夹对话框, 还可以新建文件夹 unit Unit2; interface uses Windows, Messages, SysUtils, V ...
- C#删除只读文件或文件夹(解决File.Delete无法删除文件)
引用: http://www.jb51.net/article/72181.htm C#删除只读文件的方法: if (File.GetAttributes(FFName).ToString().I ...
- ubuntu18.04 复制或剪切某文件夹下的前x个文件到另一个文件夹下
该代码可以将file_path_src文件夹中的前cnt个文件,剪切或复制到file_path_tar文件夹下,前提是file_path_src中的文件名可以排序.如VOC数据集提取某个类的图片和xm ...
- Linux常用命令,查看树形结构、删除目录(文件夹)、创建文件、删除文件或目录、复制文件或目录(文件夹)、移动、查看文件内容、权限操作
5.查看树结构(tree) 通常情况下系统未安装该命令,需要yum install -y tree安装 直接使⽤tree显示深度太多,⼀般会使⽤ -L选项⼿⼯设定⽬录深度 格式:tree -L n [ ...
- 怎么统计指定文件夹下含有.xml格式的文件数目
如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...
- 请问用Inno_Setup打包文件夹时怎么排除其中一个文件?
请问用Inno_Setup打包文件夹时怎么排除其中一个文件? 该文件夹下有几十个文件,多个文件夹,我要一个个加进去该累死,也容易出问题.不知道能不能实现我要的目的. http://www.jrsoft ...
随机推荐
- C#的基于.net framework的Dll模块编程(四) - 编程手把手系列文章
这次继续这个系列的介绍: 一.命名空间的起名: 对于C#来说,一般命名空间的建议是:公司名(或个人名称).产品名.分类名,比如我这边是用的这个:Lzhdim.LPF.Helper,意思是个人名Lzhd ...
- 前端如何操作动态渲染的多个checkbox列表单选
input[type=checkbox]:after{ content:""; display:inline-block; width:16px; ...
- 一键入门到精通:sd-webui-prompt-all-in-one 项目大揭秘!
今天向大家推荐一个宝藏项目.在创意无限的AI艺术生成世界中,sd-webui-prompt-all-in-one 项目如一股清流,为广大创作者和开发者带来了前所未有的便捷和灵感.这不仅仅是一个项目,它 ...
- 如何基于surging跨网关跨语言进行缓存降级
概述 surging是一款开源的微服务引擎,包含了rpc服务治理,中间件,以及多种外部协议来解决各个行业的业务问题,在日益发展的今天,业务的需求也更加复杂,单一语言也未必能抗下所有,所以在多语言行业解 ...
- ansible(9)--ansible的yum模块
1. yum模块 功能:管理软件包,需要确认被管理端为红帽系列的,并且需要被管理端配置好yum源. 主要的参数如下: 参数 说明 name 指定安装软件包名或软件包URL state 指定yum对应的 ...
- WPF自定义控件,如何使得xaml涉及器中的修改能立即反应到预览
这是我无意中发现的,xaml中设置的是依赖属性而不是包装器,所以我们可以直接在注册依赖属性那里设置回调,触发某个控件重绘,比如本身或父控件重绘. xaml设计器就会实时更新 1 // !!!由于xam ...
- SDXL
SDXL 模型经过训练可以创建具有更好图像质量的更大图像.它们还可以拍摄 512x512 分辨率的优质图像,因此就图像质量而言,它们通常是 SD 1 或 2 型号的良好替代品. 但是,它们确实会消耗更 ...
- uniapp 微信支付,小程序支付,支付宝支付问题汇总
背景介绍 uni-app 可以转微信小程序或直接打包 APP ,支付模块使用统一方法 uni.requestPayment 但是不同平台参数不同容易出现混淆错乱. 相关网站 uni-app 统一支付: ...
- 鸿蒙HarmonyOS实战-Stage模型(卡片数据交互)
一.卡片数据交互 HarmonyOS卡片数据交互是指在基于鸿蒙操作系统的设备上,卡片界面之间进行数据的传输和交互. HarmonyOS的卡片是一种轻量级的应用界面,可以在设备的屏幕上显示信息和提供操作 ...
- 通过计算巢轻松部署 Walrus
概述 Walrus 是一个用于管理和部署应用程序的平台,它提供了一个集中化的管理界面,使用户能够轻松地管理应用的生命周期,包括创建.配置.部署.监控和维护应用.Walrus 还提供了一些高级功能,如应 ...