R言语求取很多遥感印象的平均值、标准差:raster库
本文介绍根据R言语中的raster
包,批量读取多张栅格图画,对多个栅格图画核算平均值、标准差,并将所得新的栅格成果图画保存的办法。
在文章根据R言语的raster包读取遥感印象中,咱们介绍了根据R言语raster
包,对单张或多张栅格图画加以平均值、标准差核算的办法;但这一篇文章中的标准差核算办法只是能够对一张栅格图画的悉数像元加以核算,即标准差核算成果是一个详细的数值,而不是一景成果印象;无法对多张、多时相的栅格图画进行核算。本文就介绍另一种办法,能够对多个时相的很多栅格印象加以逐像元平均值、标准差的核算,然后使得终究的成果是一景表明各个像元在悉数时相的图画中的平均值或标准差的图画。
首要,咱们依照文章根据R言语的raster包读取遥感印象中说到的办法,装备、加载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包读取遥感印象中的办法也是能够对多个栅格图画核算平均值的。
tif_sd <- calc(tif_file_all, fun = sd)
plot(tif_sd)
此外,上述代码在calc()
函数运转时,若某一空间方位上的像元在多张栅格遥感印象中,存在至少一个无效值(NoData值),则这一像元在终究的成果图画中相同为无效值;若期望疏忽无效值的这一影响,能够将上述榜首句代码修改为如下格局。其间,na.rm = TRUE
就表明若某一景栅格遥感印象中某像元为无效值,则疏忽这一景印象中的这一个像元。
tif_sd <- calc(tif_file_all, fun = sd, na.rm = TRUE)
运转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()
函数的榜首个参数表明咱们即将保存的栅格数据,第二个参数表明保存栅格文件的途径与称号,第三个参数表明,假如第二个参数指定的途径与称号现已有文件存在了,是否直接对其加以掩盖。
随后,咱们即可在指定的途径下找到咱们刚刚核算得到的多个栅格图画的标准差成果。
至此,功德圆满。