码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于R语言的raster包读取遥感影像


    合集 - GIS空间分析(46)
    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-13
    46.基于R语言的raster包读取遥感影像03-15
    收起

      本文介绍基于R语言中的raster包,读取单张或批量读取多张栅格图像,并对栅格图像数据加以基本处理的方法。

    1 包的安装与导入

      首先,我们需要配置好对应的R语言包;前面也提到,我们这里选择基于raster包来实现栅格图像数据的读取与处理工作。首先,如果有需要的话,我们可以先到raster包在R语言的官方网站中,查阅raster包的基本情况,比如其作者信息、当前的版本、所依赖的其他包等等;如下图所示。

    image

      当然,这些内容看不看都不影响我们接下来的操作。接下来,我们开始安装raster包;这里我是在RStudio中进行代码的撰写的。

      首先,我们输入如下的代码,从而开始raster包的下载与自动配置。

    install.packages("raster")
    

      随后,按下回车键,运行代码,如下图所示。

      可以看到,我们在安装raster包时,会自动将其所需依赖的其他包(如果在此之前没有配置过)都一并配置好,非常方便。

      接下来,输入如下的代码,从而将刚刚配置好的raster包导入。

    library(raster)
    

    随后,按下回车键,运行代码,如下图所示。

      此时,在RStudio右下方的“Packages”中,可以看到raster包以及其所依赖的sp包都处于选中的状态,表明二者都已经配置成功,且完成导入。

    2 单一栅格图像读取与处理

      接下来,我们首先开始读取、处理单独一景栅格图像数据。

      首先,我们输入如下的代码;其中第一句是指定接下来要打开的栅格图像的路径与文件名,第二句则是通过raster()函数打开这一栅格图像。

    tif_file_name <- r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\A_LCC0.TIF)"
    tif_file <- raster(tif_file_name)
    

      运行上述代码。此时,我们可以在RStudio中右上方的“Environment”中看到我们刚刚新建的两个变量,以及其对应的值。

      接下来,我们可以直接通过plot()函数,对刚刚读取到的栅格图像数据加以绘制。

    plot(tif_file)
    

      运行代码后,可以在RStudio中右下方的“Plots”看到绘制完毕的图像。可以说,这一绘制栅格图像的方式,相较于Python、C++等语言都更为方便。

      随后,我们简单介绍一下对这一栅格图像数据的处理操作。例如,我们可以通过mean()函数与sd()函数,计算栅格图像全部像元数值的平均值和标准差;这里我们用到了na.rm = TRUE参数,具体含义稍后会提到。

    tif_mean <- mean(tif_file[], na.rm = TRUE)
    tif_std <- sd(tif_file[], na.rm = TRUE)
    

      运行上述代码,随后输入如下的代码,即可查看我们刚刚计算得到的平均值与标准差。

    tif_mean
    tif_std
    

      结果图下图所示。

      前面我们提到了na.rm = TRUE参数,这一参数表示是否消除数据集中无效值NA的影响;如果我们不将其设置为TRUE,那么就表示不消除数据集中的无效值;而如果我们的栅格图像中出现无效值(NoData值),那么就会使得平均值、标准差等计算结果同样为无效值NA;如下图所示。

    3 大量栅格图像读取与处理

      接下来,我们介绍一下基于raster包批量读取大量栅格图像的方法。

      首先,我们需要将存放有大量栅格图像的文件夹明确,并将其带入list.files()函数中;这一函数可以对指定路径下的文件加以遍历。其中,pattern是对文件名称加以匹配,我们用".tif$"表示只筛选出文件名称是以.tif结尾的文件;full.names表示是否将文件的全名(即路径名称加文件名称)返回,ignore.case表示是否不考虑匹配文件名称时的大小写差异。

    tif_file_path <- list.files(r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\0)", pattern = ".tif$", full.names = TRUE, ignore.case = TRUE)
    

      运行上述代码,并将这一变量打印出来,结果如下图所示。可以看到,此时我们已经将指定路径下的.tif格式的栅格图像全部提取出来了。

      接下来,我们通过stack()函数,将全部栅格图像的数据放入同一个变量中;随后,我们可以打印一下这个变量,查看其中的内容。这里需要注意,如果通过这种方法批量读取栅格图像,需要保证每一景图像的空间参考信息、行数与列数完全一致,否则会弹出报错信息。如果大家的栅格图像行数与列数不完全一致,可以参考文章Python实现snap:对齐多张遥感影像的空间范围,对各个栅格图像加以统一。

    tif_file_all <- stack(tif_file_path)
    tif_file_all
    

      运行上述代码,得到如下所示的结果。可以看到,这一变量中保存了12个图层(虽然栅格图像只有7景,但是其中有几景是具有多个波段的);其中,除了最基本的栅格图像维度、空间范围、空间参考信息等内容,names还展示了12个图层各自的名称,min values与max values则还展示了每一个图层的最小值与最大值。

      此外,我们还可以继续基于plot()函数,直接批量绘制多个图层各自的栅格图像。

    plot(tif_file_all)
    

      运行上述代码,结果如下所示。

      此外,我们还可以基于mean()等函数,对栅格图像的基本数学统计信息加以计算。不过在对多个栅格图像数据加以计算时需要注意,在tif_file_all后是否添加[]符号,得到的结果是不一样的——如果不添加[]符号,我们相当于是加以逐像元分析,对每一个位置的像元在12个图层中的数值加以统计,并计算该像元在12个图层中的平均值;因此最终所得结果是一景新的栅格图像,图像中的每一个像元数值都表示该像元在12个图层中的平均值。而如果我们添加了[]符号,那么就和前述单一栅格图像的处理一样,计算的结果就是一个数值,即12个图层中每一个像元对应数值的总体的平均值。

    tif_all_mean <- mean(tif_file_all, na.rm = TRUE)
    tif_all_mean_2 <- mean(tif_file_all[], na.rm = TRUE)
    

      我们分别打印上述两个变量,得到结果如下图所示。

      由此可以更加明显地看出添加[]符号与否的差异。

      本文就只是对R语言raster包读取、处理栅格数据加以基本的方法介绍,至于更加深入的用法,我们将在后期的文章中加以介绍。

  • 相关阅读:
    全球名校AI课程库(8)| Berkeley伯克利 · 全栈深度学习训练营课程『Full Stack Deep Learnin』
    优化用户体验:解决element中el-tabs组件切换闪屏问题
    Spring Cloud LoadBalancer--指定负载均衡策略--方法/实例
    Redis 线程模型和工作流程
    系统移植day3(FSMP1A非安全模式启动的uboot移植)
    IDEA2023.1版本新建Web项目并配置本地Tomcat
    ARCGIS进行视域分析及地形图制作
    leetcode148-Sort List
    宜宾市中小学足球调研现状
    Docker - 网络
  • 原文地址:https://www.cnblogs.com/fkxxgis/p/18074781
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号