遥感常用库的比较:Rasterio vs GDAL

news2024/11/24 23:03:51

一、前言

本博客对三种栅格处理工具做一个小小的比较:

Python (rasterio) 和 GDAL。

当我开始使用 GIS 和栅格处理时,我并没有真正关注我编写的脚本和使用的工具的性能。 但现在,处理更大的数据、更高的空间分辨率、快速处理我的光栅文件是成功的关键。 因此,我将为您比较三种栅格处理工具的性能,即使用 Landsat 8 子集进行简单的 NDVI 计算:

二、数据

首先,让我们看一下我用于基准测试的数据:这是从 USGS EarthExplorer 网页下载的标准 Landsat 8 图像。

它的空间分辨率为 30mx30m,子集的尺寸为 3485×4606 像素。 场景描绘了俄罗斯西伯利亚的贝加尔湖:

三、R语言进行遥感指数计算

R 是一个用于统计计算和图形的免费软件环境。 它可以在各种 UNIX 平台、Windows 和 MacOS 上编译和运行。 在这里,我重点介绍了 R 中广泛用于处理栅格文件的 {raster} 包。

我测试了两种算法:

  • 第一个使用 raster 包中的 overlay() 函数。 此功能使用户能够使用两个或更多输入波段执行栅格代数。 这对于计算 NDVI 是必要的。

  • 第二个,使用标准的 R 语法。

您可以查看下面的两个代码片段:

library(raster)

#----------1. ALGORITHM - RASTER PACKAGE with OVERLAY FUNCTION -------------
ras <- stack("baikal_subset.tif")

ndvi <- overlay(ras, fun=function(x){(x[1]-x[2])/(x[1]+x[2])})

writeRaster(ndvi, "ndvi_subset_raster.tif", 
            datatype="FLT8S",
            options=c("compress=lzw"),
            overwrite=T)

#---------- 2. ALGORITHM - RASTER with STANDARD R SYNTAX -----------------
ras <- stack("baikal_subset.tif")

b1 <- ras[[1]]
b2 <- ras[[2]]

ndvi = (b1-b2)/(b1+b2)

writeRaster(ndvi, "ndvi_subset_R.tif", 
            datatype="FLT8S",
            options=c("compress=lzw"),
            overwrite=T)

四、Python Rasterio

Rasterio 在内部使用 GDAL 进行文件 I/O 和栅格格式化。 它的函数通常接受并返回 Numpy ndarrays。 Rasterio 旨在使处理地理空间栅格数据更高效、更有趣。

你可以看看下面的代码:

import rasterio
import numpy

with rasterio.drivers():
    with rasterio.open('baikal_subset.tif') as src:
        b1, b2, b3, b4, b5 = src.read()

        profile = src.profile
        profile.update(
            dtype=rasterio.float64,
            count=1,
            compress='lzw')

    ndvi = numpy.zeros(b1.shape)
    ndvi = (b1-b2)/(b1+b2)

    with rasterio.open('ndvi_python.tif', 'w', **profile) as dst:
        dst.write(ndvi.astype(rasterio.float64), 1)

五、Python GDAL

我使用的最后一个工具是 GDAL 和函数 gdal_calc.py:

GDAL 是一个用于栅格和矢量地理空间数据格式的转换器库,由开源地理空间基金会根据 X/MIT 风格的开源许可发布。 作为一个库,它为所有支持的格式向调用应用程序提供单个栅格抽象数据模型和矢量抽象数据模型。 它还带有各种有用的命令行实用程序,用于数据转换和处理。

六、结果

对于基准测试,我将上述所有脚本各运行 5 次,并得到以下非常有趣的结果:

最快的处理是由 GDAL 完成的,平均值为 5.8 秒。 python rasterio 包稍慢,平均处理时间为 7.95 秒。 不幸的是,我最喜欢的软件 R 是最慢的:使用标准 R 语法记录了 15.3 秒的平均处理时间,令我震惊的是:栅格包中的 overlay() 函数平均需要 105.84 秒来计算 来自 Landsat 8 子集的 NDVI。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/417817.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国产PIE-SAR软件

1.产品定位 PIE-SAR是一款针对国内外主流星载SAR传感器的数据处理分析软件&#xff0c;提供图形化操作界面。目前已支持国内外主流星载SAR传感器的数据处理与分析&#xff0c;包括强度图像基础处理、区域网平差处理&#xff08;含异源匹配、RD/RPC区域网平差&#xff09;、InS…

TensorFlow 1.x 深度学习秘籍:1~5

原文&#xff1a;TensorFlow 1.x Deep Learning Cookbook 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…

知识图谱学习笔记——(二)知识图谱的表示

一、知识学习 声明&#xff1a;知识学习中本文主体按照浙江大学陈华钧教授的《知识图谱》公开课讲义进行介绍&#xff0c;并个别地方加入了自己的注释和思考&#xff0c;希望大家尊重陈华钧教授的知识产权&#xff0c;在使用时加上出处。感谢陈华钧教授。 &#xff08;一&…

Node版本管理工具

一、nvm简述 官网地址&#xff1a;https://nvm.uihtm.com/ nvm&#xff08;全称&#xff1a;node.js version management&#xff09;&#xff0c;是一个nodejs的版本管理工具&#xff0c;为解决node.js各种版本存在不兼容问题&#xff0c;可以使用nvm工具快速安装和切换不同版…

领英精灵安全吗?附LinkedIn(领英)开发客户的关键点

面对全球最大的职场社交平台——LinkedIn(领英)&#xff0c;很多蠢蠢欲动的外贸新人经常会问到&#xff1a;为什么那么多的外贸培训课程&#xff0c;机构和讲师以及一些外贸老鸟都会提到“如果想要把LinkedIn(领英)经营成一个有效的客户开发渠道&#xff0c;都会建议利用针对Li…

【机器学习】P17 梯度下降 与 梯度下降优化算法(BGD 等 与 Adam Optimizer、AdaGrad、RMSProp)

梯度下降与梯度下降算法梯度下降梯度下降算法基础优化算法批量梯度下降 BGD随机梯度下降 SGD小批量梯度下降 MBGD动量梯度下降 MGD基础优化算法上的改进和优化的算法自适应梯度算法 Adagrad均方根传播算法 RMSProp自适应矩估计算法 Adam代码如何实现梯度下降如何判断收敛梯度下…

pytorch搭建ResNet50实现鸟类识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f366; 参考文章地址&#xff1a; 365天深度学习训练营-第J1周&#xff1a;ResNet-50算法实战与解析 &#x1f356; 作者&#xff1a;K同学啊 理论知识储备 深度残差网络ResNet&#xff08;dee…

KD2511N高精度直流低电阻值测试仪

一、产品简介 KD2511N直流低电阻测试仪采用32bits CPU和高密度 SMD贴装工艺&#xff0c; 拥有0.05%的 电阻测量精度及1uΩ 小电阻分辨率&#xff0c;内部比较器可让使用者自行设定上限/下限参考比较值。高达每秒15次的测试速度能显著提高工作效率&#xff0c;免清零的设计在小电…

数据结构刷题笔记 | 数组、字符串、链表、栈、队列、数、图

本篇为笔者学习数据结构时&#xff0c;在牛客网站的刷题笔记。 数据结构分为&#xff1a; 逻辑结构【面向问题的】 集合结构线性结构&#xff08;一对一&#xff09;树形结构&#xff08;一对多的层次关系&#xff09;图形结构&#xff08;多对多&#xff09; 物理结构&#x…

Docker 实战笔记-基础

转载请标明出处&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/130181636 本文出自【赵彦军的博客】 文章目录官网下载安装安装Docker 镜像常用命令docker infodocker imagesdocker versiondocker 仓库官方仓库&#xff1a;[https://hub.docker.com/](https://…

移动端树形结构

该组件依据需求来做&#xff0c;当前包含三种选择状态&#xff0c;选中&#xff0c;未选中&#xff0c;半选。由于不需要做树形的收缩展开故没有写相关内容。树形展开与收缩与选中类似&#xff0c;只需要在节点上挂载相关字段即可实现。由于需求需要增加不限的功能&#xff0c;…

Moonbeam操作指南 | 如何设置Moonbeam开发节点

Moonbeam开发节点是为本地构建和测试应用的个人开发环境。对以太坊开发者来说&#xff0c;可以和Ganache相媲美。可以使你快速上手&#xff0c;且无需中继链的支出即可轻松实现。 有2种方式可以开始运行节点&#xff1a;使用Docker运行一个预构建的二进制文件&#xff0c;或者…

Java面试宝典

JDK,JRE,JVM 三者关系&#xff1f; JDK 是 JAVA 程序开发时用的开发工具包&#xff0c;其内部也有 JRE 运行环境 JRE。JRE 是 JAVA 程序运行时需要的运行环境&#xff0c;就是说如果你光是运行 JAVA 程序而不是去搞开发的话&#xff0c;只安装 JRE 就能运行已经存在的 JAVA 程…

我们发送的信息数据是怎么处理的?

下图以用户 a 向用户 b 发送邮件为例子&#xff1a; 数据处理流程 1、应用程序处理 首先应用程序会进行编码处理&#xff0c;这些编码相当于 OSI 的表示层功能&#xff1b; 编码转化后&#xff0c;邮件不一定马上被发送出去&#xff0c;这种何时建立通信连接何时发送数据的管…

5G/V2X赛道「重启」

在提升高阶智能驾驶安全性和感知冗余能力的道路上&#xff0c;除了激光雷达、高精度地图及定位&#xff0c;还有一项技术可能即将掀起一场新的风暴。 就在今年3月&#xff0c;作为全球通信领域的年度风向标 — 2023世界移动通信大会&#xff08;MWC&#xff09;上&#xff0c;…

无需魔法打开即用的 AI 工具集锦

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

Tomcat源码:StandardEngine、StandardHost、StandardContext、StandardWrapper

前文&#xff1a; 《Tomcat源码&#xff1a;启动类Bootstrap与Catalina的加载》 《Tomcat源码&#xff1a;容器的生命周期管理与事件监听》 《Tomcat源码&#xff1a;StandardServer与StandardService》 《Tomcat源码&#xff1a;Container接口》 写在开头&#xff1a;本文…

【C++STL精讲】vector的模拟实现

文章目录&#x1f490;专栏导读&#x1f490;文章导读&#x1f337;定义vector类&#x1f337;各成员函数的实现&#x1f33a;构造函数&#x1f33a;迭代器&#x1f33a;size与capacity——求大小与容量&#x1f33a;reserve——扩容关于reserve中的深浅拷贝问题&#x1f33a;r…

RK3399平台开发系列讲解(基础篇)ADC 使用方法

🚀返回专栏总目录 文章目录 一、ADC 的 DTS 配置二、ADC 驱动说明2.1、获取 AD 通道2.2、读取 AD 采集到的原始数据2.3、计算采集到的电压三、接口说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢内核采用工业 I/O 子系统来控制 ADC,该子系统主要为 AD 转换或者…

Day920.结构化日志业务审计日志 -SpringBoot与K8s云原生微服务实践

结构化日志&业务审计日志 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于结构化日志&业务审计日志的内容。 1、什么是结构化日志 结构化日志&#xff08;Structured Logging&#xff09;是一种将日志信息组织为结构化数据的技术。 传统的日志通常是一些文…