R语言raster包计算多个栅格图像平均值、标准差的方法

news/2024/7/7 20:07:59

  本文介绍基于R语言中的raster包,批量读取多张栅格图像,对多个栅格图像计算平均值标准差,并将所得新的栅格结果图像保存的方法。

  在文章R语言raster包批量读取单一或大量栅格图像(https://blog.csdn.net/zhebushibiaoshifu/article/details/128485386)中,我们介绍了基于R语言raster包,对单张或多张栅格图像加以平均值标准差计算的方法;但这一篇文章中的标准差计算方法仅仅可以对一张栅格图像的全部像元加以计算,即标准差计算结果是一个具体的数值,而不是一景结果影像;无法对多张、多时相的栅格图像进行计算。本文就介绍另一种方法,可以对多个时相的大量栅格影像加以逐像元平均值、标准差的计算,从而使得最终的结果是一景表示各个像元在全部时相的图像中的平均值或标准差的图像

  首先,我们按照文章R语言raster包批量读取单一或大量栅格图像(https://blog.csdn.net/zhebushibiaoshifu/article/details/128485386)中提到的方法,配置、加载raster包,并通过stack()函数读取同一文件夹下的全部栅格图像,具体代码如下所示。其中,代码的含义我们在上述这一篇文章中已经加以介绍,这里就不再赘述。

library(raster)
tif_file_path <- list.files(r"(E:\02_Project\01_Chlorophyll\LCC_SC_2020\SD)", pattern = ".tif$", full.names = TRUE, ignore.case = TRUE)
tif_file_all <- stack(tif_file_path)

  运行上述代码,可以看到已经得到了RasterStack格式的结果数据,如下图所示。

在这里插入图片描述

  接下来,我们通过calc()函数,对多时相栅格遥感影像数据加以计算;其中,其第一个参数tif_file_all就是需要加以计算的多个栅格图像,而第二个参数fun = sd表示我们需要计算标准差;如果我们需要计算平均值,那么就将第二个参数修改为fun = mean即可,我们这里就以标准差为例介绍后续的操作。当然,前述提到的文章R语言raster包批量读取单一或大量栅格图像(https://blog.csdn.net/zhebushibiaoshifu/article/details/128485386)中的方法也是可以对多个栅格图像计算平均值的。

tif_sd <- calc(tif_file_all, fun = sd)
plot(tif_sd)

  运行calc()函数后,我们可以通过plot()函数将结果图像绘制出来,如下图所示。

在这里插入图片描述

  上图即为多个栅格图像的像元数值时间序列依次计算标准差所得的结果。

  此外,由于我这里的栅格像元数据实际表达的数值之间有一个缩放系数0.01,因此通过下述代码将其像元值恢复为实际含义的数值。

tif_sd_new <- tif_sd / 100
plot(tif_sd_new)

  随后,重新绘制结果图;确认无误后,即可依据writeRaster()函数,通过如下代码保存我们刚刚得到的标准差结果栅格图像。

rf <- writeRaster(tif_sd_new, filename = r"(E:\02_Project\01_Chlorophyll\LCC_SC_2020\SD\LCC_SD.tif)", overwrite = TRUE)

  运行代码后,如下图所示。其中,writeRaster()函数的第一个参数表示我们将要保存的栅格数据,第二个参数表示保存栅格文件的路径与名称,第三个参数表示,如果第二个参数指定的路径与名称已经有文件存在了,是否直接对其加以覆盖。

在这里插入图片描述

  随后,我们即可在指定的路径下找到我们刚刚计算得到的多个栅格图像的标准差结果。

欢迎关注:疯狂学习GIS


http://lihuaxi.xjx100.cn/news/633392.html

相关文章

Linux网络常用命令(ifconfig/ethtool/nmon+n)

Linux网络常用命令ifconfig可设置网络设备的状态&#xff0c;或是显示目前的设置ethtool 是用于查询及设置网卡参数的命令服务端监控工具&#xff1a;nmonnmon可监控的数据类型ifconfig可设置网络设备的状态&#xff0c;或是显示目前的设置 显示linux系统中当前服务器中的全部…

zerotier虚拟网络配置,局域网与外网如同局域网一样访问。

zerotier:可以搭建用于自己的虚拟网络&#xff0c;经过授权连接成功之后彼此都在同一网段&#xff0c;可以像在局域网一样互相访问。 1.创建zerotier账户 2.创建网络&#xff08;Create A Network&#xff09;并记住网络标识&#xff08;NETWORK ID&#xff09; 一、openwrt设…

【bug记录】translateZ在z轴运动会裁去屏幕外的内容,有个边框(安卓异常,ios正常)

问题描述 最近在写公司app的用户年终盘点&#xff0c;首页需要做个动效。大概效果就是很多花或者其他元素从屏幕里往屏幕外扩散的效果。 我立马想到了用transform来做&#xff0c;只要将图片在z轴上进行移动就行&#xff0c;然后再配合filer: blur()加强元素的层叠关系。 但是…

nacos2.x集群版搭建

1. 预备环境准备 请确保是在环境中安装使用: 64 bit OS Linux/Unix/Mac&#xff0c;推荐使用Linux系统。--这里使用linux系统64 bit JDK 1.8&#xff1b;下载. 配置。Maven 3.2.x&#xff1b;下载. 配置。3个或3个以上Nacos节点才能构成集群。官网地址:集群部署说明 2、服务器…

MyBatis面试专题及答案【二】

9、MyBatis 与 Hibernate 有哪些不同&#xff1f;答&#xff1a;1&#xff09;Mybatis 和 hibernate 不同&#xff0c;它不完全是一个 ORM 框架&#xff0c;因为 MyBatis 需要程序员自己编写 Sql 语句&#xff0c;不过 mybatis 可以通过 XML 或注解方式灵活配置要运行的 sql 语…

关于 国产麒麟系统上长时间运行Qt程序.xsession-erros文件占满磁盘导致无法写入 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128660728 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

常用数据处理方法

后续慢慢补充。 Pandas 以下代码需要&#xff1a; import pandas as pd读取数据 df pd.read_csv(path)得到一个 data_frame对象。 表的大致概况 表头、表尾数据 df.head() # 输出表头5项 df.tail() # 输出表尾5项表大致情况 describe df.describe() # 关于表大致数据表每…

uni-app中自定义TabBar

1.由于原生的tabBar不能做到事件的拦截处理所以才自定义 注意点&#xff1a;自定义tabBar后则原生的uni.switchTab(OBJECT)不能再使用了 第一步&#xff1a;需要把原生的tabBar注释掉 第二步&#xff1a;在components下新建TabBar.vue文件&#xff08;那个页面用那个页面引入…