采用GDAL批量波段运算计算植被指数0基础教程

采用GDAL批量波段运算计算植被指数0基础教程

1. 引言

在传统的遥感数据处理方法中,通常使用ArcGis或ENVI软件进行波段运算。然而,这些软件在处理大量数据时往往效率低下。有没有一种方法可以批量进行波段运算,一下子计算几十个植被指数,并自动保存计算后的指标影像到相应目录下呢?答案是肯定的!本文将介绍如何使用GDAL库实现这一目标。

2. GDAL简介

GDAL(Geospatial Data Abstraction Library)是一个用于处理栅格数据和矢量数据的开源库,是地理信息系统(GIS)和遥感领域的重要工具之一。GDAL的详细介绍及其安装可以查看这篇文章:GDAL介绍及安装。

3. 植被指数计算公式

这里列出了要计算的23种植被指数及其计算公式:

  • DVI 为差值植被指数;
  • EVI 为增强植被指数;
  • GCVI 为绿光归一化差值植被指数;
  • GNDVI 为绿光归一化差值植被指数;
  • ISR1, ISR2 为短波红外比值植被指数;
  • LSWI 为地表水分指数;
  • MSAVI 为修正型土壤调节植被指数;
  • NDPI 为归一化差异物候指数;
  • NDVI 为归一化植被指数;
  • NDWI1, NDWI2, NDWI3 为归一化水体指数;
  • RENDVI1, RENDVI2 为红边归一化差值植被指数;
  • RENDWI1, RENDWI2 为红边归一化水体指数;
  • SAVI 为土壤调节植被指数;
  • SR 为比值植被指数;
  • TR1, TR2 为比值生物学变量植被指数;
  • VRE1, VRE2 为红边植被指数。
植被指数计算公式
DVIDVI = nir - red
EVIEVI = 2.5 × (nir - red)/(nir + 6 × red - 7.5 × blue + 1)
GCVIGCVI = nir/green - 1
GNDVIGNDVI = (nir - green)/(nir + green)
ISR1ISR1 = nir/swir1
ISR2ISR2 = nir/swir2
LSWILSWI = (nir - swir1)/(nir + swir1)
MSAVIMSAVI = 1/2 × (2 × nir + 1 - ((2 × nir + 1)^2 - 8 × (nir - red))^(1/2))
NDPINDPI = (nir - (0.74 × red + 0.26 × swir1))/(nir + (0.74 × red + 0.26 × swir1))
NDVINDVI = (nir - red)/(nir + red)
NDWI1NDWI1 = (nir - swir1)/(nir + swir1)
NDWI2NDWI2 = (nir - swir2)/(nir + swir2)
NDWI3NDWI3 = (green - nir)/(green + nir)
RENDVI1RENDVI1 = (nir - red1)/(nir + red1)
RENDVI2RENDVI2 = (nir - red2)/(nir + red2)
RENDWI1RENDWI1 = (red1 - swir1)/(red1 + swir1)
RENDWI2RENDWI2 = (red2 - swir1)/(red2 + swir1)
SAVISAVI = (1 + L) × (nir - red)/(nir + red + 0.5)
SRSR = nir/red
TR1TR1 = (1/red1 - 1/red1) × nir
TR2TR2 = (1/red - 1/nir) × red2
VRE1VRE1 = nir/red1
VRE2VRE2 = nir/red2

4. 批量计算植被指数

使用 gdal_calc.py 工具可以批量计算表格中各植被指数。以下是计算这些植被指数的命令示例:

python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=dvi.tif --calc="A-B"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 -C ronghe.tif --C_band=2 --outfile=evi.tif --calc="2.5*((A-B)/(A+6*B-7.5*C+1))"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=3 --outfile=gcvi.tif --calc="(A/B)-1"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=3 --outfile=gndvi.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=6 --outfile=isr1.tif --calc="A/B"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=7 --outfile=isr2.tif --calc="A/B"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=6 --outfile=lswi.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=msavi.tif --calc="0.5*(2*A+1-((2*A+1)**2-8*(A-B))**0.5)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 -C ronghe.tif --C_band=6 --outfile=ndpi.tif --calc="(A-(0.74*B+0.26*C))/(A+(0.74*B+0.26*C))"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=ndvi.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=6 --outfile=ndwi1.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=7 --outfile=ndwi2.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=3 -B ronghe.tif --B_band=5 --outfile=ndwi3.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=rendvi1.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=rendvi2.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=4 -B ronghe.tif --B_band=6 --outfile=rendwi1.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=4 -B ronghe.tif --B_band=6 --outfile=rendwi2.tif --calc="(A-B)/(A+B)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=savi.tif --calc="(1+0.5)*(A-B)/(A+B+0.5)"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=sr.tif --calc="A/B"python gdal_calc.py -A ronghe.tif --A_band=4 -B ronghe.tif --B_band=4 --C ronghe.tif --C_band=5 --outfile=tr1.tif --calc="(1/A-1/B)*C"python gdal_calc.py -A ronghe.tif --A_band=4 -B ronghe.tif --B_band=5 -C ronghe.tif --C_band=4 --outfile=tr2.tif --calc="(1/A-1/B)*C"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=vre1.tif --calc="A/B"python gdal_calc.py -A ronghe.tif --A_band=5 -B ronghe.tif --B_band=4 --outfile=vre2.tif --calc="A/B"

这里如何快速生成这些指令呢?我将公式截图直接发给给GPT, 然后给了它一个示范指令如何构建,让其构建所有公式的指令,只需要简单对一下即可,一般不会错,省去了手敲指令的过程。

这些命令使用 gdal_calc.py 工具来计算表格中的各个植被指数,其中 A_bandB_bandC_band 分别对应 Landsat 8多光谱,这里我们将其改名成ronghe.tif (你可以改为你的影像名字)的不同波段。请根据实际数据文件调整命令中的文件名和波段编号。

5. 批处理脚本自动计算

手动运行每条命令会非常麻烦,因此可以将这些命令写入一个批处理文件(.bat),实现自动计算。

创建批处理文件
  1. 打开记事本,将上述命令内容复制进去。

  2. 保存文件,将文件名命名为run.bat

  3. 将gdal_calc.py文件和遥感影像文件放入同一文件夹下。

    gdal.py文件已经上传到百度网盘,需要可搜索关注作者微信公众号:Python与遥感 获取
    在这里插入图片描述

运行批处理文件
  1. 打开Anaconda Prompt。
  2. 输入以下命令进入相应的驱动器和目录:
    F:
    cd path\to\your\folder
    
  3. 输入并运行批处理文件:
    run.bat
    

运行后,批处理文件将自动依次执行每个命令,计算所有植被指数,并将结果保存到相应的文件中。

6. 结果展示

每条命令运行后,对应的植被指数会保存在文件夹中,黑窗里的数字到99就代表计算完了一个植被指数。只需等待一小会儿,即可计算完所有的植被指数计算。

7. 总结

通过本文介绍的方法,使用GDAL库可以高效地批量计算植被指数,大大提高了工作效率。批处理文件的使用使得整个过程更加自动化和简便。希望这篇0基础教程能帮助大家更好地掌握GDAL的使用方法。如果有任何问题或需要进一步的帮助,请在评论区留言。
欢迎关注我的公众号:python与遥感,或许里面有你想要的免费教程。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算word文件打印页数 VBA实现

目录 场景复现环境说明实现原理计算当前文件夹下所有word文件页数总和利用递归计算当前文件夹所有work文件页面数量几个BUG计算结果软件报价后话 场景复现 最近需要帮我弟打印高考资料,搜集完资料去网上打印,商家发出了这个计算页数的界面。我就好奇怎么…

如何把视频语音转文字?交给这4款工具就完事

这两天巴黎奥运会的盛大开幕,世界各地的记者们纷纷涌入这个体育盛事的现场,带着他们的镜头和麦克风,捕捉每一个激动人心的瞬间。 然而,随着采访的深入,如何快速准确地将这些珍贵的视频内容转化为文字记录,…

C语言 | Leetcode C语言题解之第309题买卖股票的最佳时机含冷冻期

题目&#xff1a; 题解&#xff1a; int maxProfit(int* prices, int pricesSize) {if (pricesSize 0) {return 0;}int f0 -prices[0];int f1 0;int f2 0;for (int i 1; i < pricesSize; i) {int newf0 fmax(f0, f2 - prices[i]);int newf1 f0 prices[i];int newf2…

Linux 和 Unix 的关系

Linux 和 Unix 的关系 2.2.1unix 是怎么来的 2.2.2Linux 是怎么来的 GNU计划的另一个目的是构建自由的软件文化&#xff0c;以支持以无条件自由软件和开放源码程序这种文化理念为核心的一整套系统&#xff0c;来推动软件在世界范围内的普及及发展。其中包括支持点&#xff08;推…

海思Hi35XX系列(一)环境搭建与挂载

小白一个&#xff0c;新的开发板刚到手有点懵&#xff0c;之前没弄过没有经验&#xff0c;简单记录一下吧 一般买开发板都会给带一个已经配置好的虚拟机文件&#xff0c;直接使用就可以 一、下载安装虚拟机与镜像文件 VMware-workstation16.1.0 我的镜像文件是官方文档资料…

路径规划——广度优先搜索与深度优先搜索

路径规划——广度优先搜索与深度优先搜索 https://www.hello-algo.com/chapter_graph/graph_traversal/ 1.广度优先搜索 Breath-First-Search 在图论中也称为广度优先遍历&#xff0c;类似于树的层序遍历。 算法原理 从起始节点出发&#xff0c;首先访问它的邻近节点&…

Typora2024最新版破解方法(亲测可用)

此方法非常简单&#xff0c;无需安装dll补丁&#xff0c;无需修改注册表&#xff0c;无需使用老版本。仅需修改部分文件内容即可 方法步骤 步骤一 下载并安装Typora 安装Typora 打开官网 下载并安装最新版即可 点击访问Typora官网 https://typoraio.cn/ 步骤二 修改文件 …

C#编写多导联扫描式的波形图Demo

本代码调用ZedGraph绘图框架&#xff0c;自己先安装好ZedGraph环境&#xff0c;然后拖一个zedGraphControl控件就行了&#xff0c;直接黏贴下面代码 基本代码显示 using System; using System.Windows.Forms; using ZedGraph; using System.Timers;namespace ECGPlot {public…

Bugku-ctf-web

Simple_SSTI_1 1.启动场景&#xff0c;http://114.67.175.224:12592 2.页面提示传入参数flag&#xff0c;F12查看源码得到第二个提示 3.SECRET_KEY(秘钥)是Flask中重要的一个配置值&#xff0c;在这题&#xff0c;构造语句查看它&#xff0c;得到flag&#xff0c;也可以构造?…

python+selenium+unittest自动化测试框架

前言 关于自动化测试的介绍&#xff0c;网上已有很多资料&#xff0c;这里不再赘述&#xff0c;UI自动化测试是自动化测试的一种&#xff0c;也是测试金字塔最上面的一层&#xff0c;selenium是应用于web的自动化测试工具&#xff0c;支持多平台、多浏览器、多语言来实现自动化…

AGV系统设计解析:布局-车体-对接-数量计算-路径规划

AGV AGV是实现柔性制造、装配及自动化物流的关键设备之一&#xff0c;近几年来&#xff0c;随着各国智能制造政策的不断实施&#xff0c;促进了AGV产业的快速发展。 目前&#xff0c;AGV系统广泛应用于各个行业之中&#xff0c;比如物流行业、新能源行业、汽车行业、制药行业等…

Python爬虫入门02:Fiddler下载使用教程

文章目录 手机抓包全攻略&#xff1a;Fiddler 工具深度解析引言Fiddler 工具简介为什么选择 Fiddler&#xff1f; 安装与配置 Fiddler步骤一&#xff1a;下载与安装步骤二&#xff1a;配置浏览器代理步骤三&#xff1a;安装 HTTPS 证书 配置手机以使用 Fiddler步骤一&#xff1…

堆的创建和说明

文章目录 目录 文章目录 前言 小堆&#xff1a; 大堆&#xff1a; 二、使用步骤 1.创建二叉树 2.修改为堆 3.向上调整 结果实现 总结 前言 我们已经知道了二叉树的样子&#xff0c;但是一般的二叉树是没有什么意义的&#xff0c;所以我们会使用一些特殊的二叉树来进行实现&a…

码农职场:一本专为IT行业求职者量身定制的指南

目录 写在前面 推荐图书 推荐理由 写在后面 写在前面 本期博主给大家推荐一本专为IT行业求职者量身定制的指南&#xff1a;《码农职场》。 推荐图书 https://item.jd.com/14716160.html 内容简介 这是一本专为广大IT 行业求职者量身定制的指南&#xff0c;提供了从职前…

Netty 必知必会(四)—— Channel-Pipeline 责任链

一、责任链模式 适用场景: 对于一个请求来说&#xff0c;如果每个对象都有机会处理它&#xff0c;而且不明确到底是哪个对象会处理请求时&#xff0c;我们可以考虑使用责任链模式实现它&#xff0c;让请求从链的头部往后移动&#xff0c;直到链上的一个节点成功处理了它为止 …

python爬虫初识

一、什么互联网 互联网&#xff08;Internet&#xff09;是全球范围内最大的计算机网络&#xff0c;它将数以百万计的私人、公共、学术、商业和政府网络通过一系列标准通信协议&#xff08;如TCP/IP&#xff09;连接起来形成的一个庞大的国际网络。 互联网的起源可以追溯到196…

Java 后端已经过时的技术,也是我逝去的青春

最近这段时间收到了一些读者的私信&#xff0c;问我某个技术要不要学&#xff0c;还有一些的同学竟然对 Java 图形化很感兴趣&#xff0c;还想找这方面的工作。 我接触 Java 已近 10多年了&#xff0c;见证了许多 Java 技术变迁&#xff0c;包括&#xff1a; JavaEE 框架&…

常见的应急救援设备有哪些_鼎跃安全

在我们的生活中&#xff0c;应急事件的发生常常是突如其来的&#xff0c;它们对人民的生命财产安全构成重大威胁&#xff0c;同时也对社会稳定提出严峻挑战。在这样的紧急情况下&#xff0c;迅速开展有效的救援工作显得尤为重要。而在整个救援过程中&#xff0c;应急设备的使用…

1-4章节复习总结

1-4章节总结 章节重点回顾-第一章-中央处理单元练习题 章节重点回顾-第一章-进制章节重点回顾-第一章-校验码奇偶校验码CRC循环冗余校验码海明码练习题 多草节重点回顾-第一草-计算机体系结构分类章节重点回顾-第一章-计算机指令练习题 章节重点回顾-第一章-指令流水线练习题 章…

canvas绘制表格

canvas绘制表格 最近在为公司产品做技术预研&#xff0c;经理让用canvas做一个表格&#xff0c;于是就有了这篇博客。 我们的数据是后端通过MQTT推送过来的 我在代码中也直接使用了 具体MQTT的实现代码&#xff0c;可见博客 在vue使用MQTT 在这里为了方便实用我直接封装成组件…