码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • R语言遍历文件夹求取其中所有栅格文件的平均值


    本文介绍基于R语言中的raster包,遍历读取多个文件夹下的多张栅格遥感影像,分别批量对每一个文件夹中的多个栅格图像计算平均值,并将所得各个结果栅格分别加以保存的方法~
    合集 - GIS空间分析(60)
    1.地统计学的基本概念及公式详解2023-04-242.单窗算法的地表温度反演:谷歌地球引擎GEE代码2023-04-263.SPSS计算极值、平均值、中位数、方差、偏度、峰度、变异系数2023-05-084.Python忽略NoData计算多张遥感影像的像元平均值:whitebox库2023-05-155.ArcGIS如何自动获得随机采样点?2023-05-176.ENVI手动地理配准栅格图像的方法2023-05-247.ArcMap手动新建矢量要素的方式2023-05-268.ENVI指定像元数量(行数与列数)裁剪栅格图像2023-05-309.Python批量填补遥感影像的无效值NoData2023-06-0110.ArcPy批量对大量遥感影像相减做差2023-06-2511.ArcMap镶嵌数据集的创建、数据导入与数据范围修改方法2023-07-0412.ENVI实现QUAC、简化黑暗像元、FLAASH方法的遥感影像大气校正2023-07-1013.ENVI大气校正方法反演Landsat 7地表温度2023-07-1714.ENVI、ERDAS计算Landsat 7地表温度:单窗算法实现2023-07-3015.全球都有哪些高光谱遥感卫星?2023-08-1916.ArcMap时间滑块绘制遥感影像的动态变化过程2023-08-2017.ENVI+ERDAS实现Hyperion叶绿素含量反演:经验比值法、一阶微分法2023-08-2618.ArcMap用一个面要素擦除另一个面要素的部分2023-08-2719.全局多项式(趋势面)与IDW逆距离加权插值:MATLAB代码2023-09-0220.ArcMap中矢量数据修改标注Label的方法2023-09-0321.回归克里格、普通克里格插值在ArcGIS中的实现2023-09-1022.GIS中的ROI文件可否由.xml格式转为.roi格式?2023-09-1623.地理探测器Geodetector下载、使用、结果分析方法2023-09-1724.ArcGIS将遥感影像的0值设置为NoData2023-09-2225.基于AvaSpe 2048测定物体的光谱曲线2023-09-2426.ArcGIS地图投影与坐标系转换的方法2023-09-2827.下载、安装CAN-EYE植被参数工具2023-10-0728.如何用CAN-EYE获取植被参数数据?2023-10-2229.ArcMap属性表出现乱码情况的解决2023-10-2730.物体三维模型的构建:3DSOM软件实现侧影轮廓方法2023-11-1231.空间三维模型的编码结构光方法实现:基于EinScan-S软件2023-11-2532.MATLAB时间序列数据重建与平滑:HANTS滤波2023-12-0133.无人机影像的空间三维建模:Pix4Dmapper运动结构恢复法2023-12-0934.Pix4Dmapper空间三维模型的应用实例:GIS选址分析2023-12-2335.用ArcGIS模型构建器生成、导出Python转换空间坐标系的代码01-1836.安装MicroStation软件、Terrasolid插件的方法01-2237.在Visual Studio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)02-0138.C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组02-0339.创建大量栅格文件并分别写入像元数据:C++ GDAL代码实现02-0440.C++ GDAL用CreateCopy()新建栅格并修改波段的个数02-2641.基于Python GDAL为长时间序列遥感图像绘制时相变化曲线图02-2842.Python实现snap:对齐多张遥感影像的空间范围03-0443.Landsat 7的热红外波段有2个该如何选择?03-1044.遥感图像镶嵌拼接:ENVI的Pixel Based Mosaicking工具操作方法03-1145.ENVI为遥感影像设置空间坐标系的方法03-1346.基于R语言的raster包读取遥感影像03-1547.地理探测器R语言实现:geodetector03-1848.Python基于Excel生成矢量图层及属性表信息:ArcPy03-2049.ArcMap的mxd文件没有数据、显示感叹号怎么办?03-2250.基于R语言的GD库实现地理探测器并自动将连续变量转为类别变量03-2551.Linux电脑如何下载QGIS?03-2952.Python基于Excel数据加以反距离加权空间插值并掩膜图层04-1053.ArcMap分别求取矢量要素各区域的面积04-1554.论文研究区域图的制作方法:ArcGIS04-1755.ArcPy自动绘制大量地图并设置地图要素:Python04-2256.ENVI自动地理配准:GCP地面控制点的自动产生05-2357.Python遥感影像叠加分析:基于一景数据提取另一数据06-1758.R语言求取大量遥感影像的平均值、标准差:raster库06-19
    59.R语言遍历文件夹求取其中所有栅格文件的平均值06-28
    60.ENVI无缝镶嵌、拼接栅格数据的方法07-07
    收起

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

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

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

    image

      其中,上图中的每一个文件夹的命名都是以遥感影像的分幅条带号为依据的。例如,打开第一个名为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()函数输出一下当前代码的运行进度。

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

      至此,大功告成。

  • 相关阅读:
    c++复习笔记——STL(vector)
    第十三章 手动创建 REST 服务(一)
    MGADA | 用于目标检测的多粒度对齐域自适应
    Rust核心功能之一(所有权)
    Could not find artifact com.github.jgraph:jgraphx:pom:v3.9.3 in aliyunmaven
    android Leakcanary/Studio Profiler/MAT 处理内存问题(泄漏和Big超大内存对象)
    基于JavaSwing开发自选拼图游戏 课程设计 大作业
    Basler相机Sdk采图的演示例程(C#)
    在vscode 中使用npm的问题
    docker搭建nacos集群并用mysql做持久化
  • 原文地址:https://www.cnblogs.com/fkxxgis/p/18273020
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号