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

news2024/9/16 9:51:05

采用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.coloradmin.cn/o/1961132.html

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

相关文章

将项目部署到docker容器上

通过docker部署前后端项目 前置条件 需要在docker中拉去jdk镜像、nginx镜像 docker pull openjdk:17 #拉取openjdk17镜像 docker pull nginx #拉取nginx镜像部署后端 1.打包后端项目 点击maven插件下面的Lifecycle的package 对后端项目进行打包 等待打包完成即可 2.将打…

【全志H616开发】Linux的热拔插UDEV机制

文章目录 udev简介工作原理Udev 配置文件和规则示例总结: udev简介 Udev 是 Linux 系统中设备管理的一部分,它负责管理动态设备节点并处理设备的热插拔。Udev 提供了一种在用户空间管理设备节点的机制,可以在设备插入或移除时自动执行相应的…

2024.7.30问题合集

2024.7.30问题合集 1.adb调试出现5037端口被占用的情况2.更改ip地址时出现以下问题3.RV1126 ip配置问题 1.adb调试出现5037端口被占用的情况 问题:5037端口被占用的情况 解决方案:将adb文件下的adb.exe和AdbWinApi.dll两个文件复制到C:\Windows\SysWOW6…

红外热成像仪的功能应用_鼎跃安全

红外热成像仪利用红外探测器接收被测目标物体发射的红外辐射能量;通过接收到红外辐射转化为电信号,将这些信号放大转化后,通过不同的颜色代表不同温度,从而直观的在电子屏显示出来,可以清晰的观察到物体的热分布。 热成…

flex/bison结合使用解析配置文件

flex是gnu linux下的语法分析器程序(lex则是Unix下的语法分析器),它将输入文件(yyin)的内容去匹配对应的匹配规则表达式,并返回一个token。注意,flex的copyright并不是gnu的。 bison是gnu linux下的yacc(Yet Another Compiler Compiler)&…

【计算机毕设论文】基于SpringBoot的成绩管理系统

💗博主介绍:✌全平台粉丝5W,高级大厂开发程序员😃,博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 感兴趣的可以先收藏起来,同学门有不懂的毕设选题,项目以及论文编写等相…

3.5.4、查找和排序算法-排序算法下

快速排序 快速排序的基本思想是:通过一趟排序将待排的序列划分为独立的两个部分,其中一部分序列的元素均不大于另一部分记录的关键字,然后再分别对这两部分序列继续进行快速排序,以达到整个序列有序。 大致步骤如下:…

2024西安铁一中集训DAY27 ---- 模拟赛((bfs,dp) + 整体二分 + 线段树合并 + (扫描线 + 线段树))

文章目录 前言时间安排及成绩题解A. 倒水(bfs dp)B. 让他们连通(整体二分 按秩合并并查集 / kruskal重构树)C. 通信网络(线段树合并 二分)D. 3SUM(扫描线 线段树) 前言 T1没做出…

6万字,让你轻松上手的大模型 LangChain 框架

本文为我学习 LangChain 时对官方文档以及一系列资料进行一些总结~覆盖对Langchain的核心六大模块的理解与核心使用方法,全文篇幅较长,共计50000字,可先码住辅助用于学习Langchain。** 一、Langchain是什么? 如今各类…

FPGA实现LCD12864控制

目录 注意! a) 本工程采用野火征途PRO开发板,外接LCD12864部件进行测试。 b) 有偿提供代码!!!可以定制功能!!!有需要私信!!! c) 本文测试采用…

操作系统02

文章目录 Linux 内核 vs Windows 内核内核Linux 的设计MultiTaskSMPELFMonolithic Kernel **Windows 设计** 内存管理虚拟内存内存分段内存分页多级页表TLB 段页式内存管理Linux 内存布局内存分配的过程是怎样的?哪些内存可以被回收?回收内存带来的性能影…

中国RoHS新增4项邻苯二甲酸酯管控,电子电气产品GB/T 26572-2011测试

中国RoHS 新增4项邻苯类物质 01 资讯内容 2024年6月29日,国家市场监督管理总局(国家标准化管理委员会)发布了2024年第14号中国国家标准公告,批准了109项国家标准和4项国家标准修改单。 其中,中国RoHS配套的标准GB/T 2…

人工智能和机器学习2 (复旦大学计算机科学与技术实践工作站)python调用百度AI、获取token,并利用opencv绘制分析图,做简单判断

前言 在现代科技的推动下,人工智能(AI)和机器学习(ML)逐渐成为各行各业的重要工具。百度AI开放平台作为全球领先的人工智能服务平台,为开发者提供了包括语音、图像、自然语言处理(NLP&#xff…

Python常用内置库介绍

Python作为一门强大且易学的编程语言,内置了许多功能强大的库,让开发者能够更加便捷地完成各种任务。本文中,我将详细介绍Python中常用的内置库。 math:提供数学函数,如三角函数、对数函数等。 示例:计算平…

Pycharm conda 虚拟环境添加失败---windows

版本: conda:23.5.2 pycharm:2023.1.3 解决方案: 已验证: 使用系统解释器选择python.exe进行本地添加(ps:该方式不会显示conda名称) conda路径使用conda info查询 还有一个是在查找解决方法的时候看到比…

05-ArcGIS For JavaScript-RenderNode后处理效果

05-ArcGIS For JavaScript-RenderNode后处理效果 综述代码解析代码实现颜色混合完整代码结果高亮处理完整代码结果 结语 综述 ArcGIS For JavaScript 4.9版本提供了很多优秀的功能,其中提供了RenderNode类,既可以支持第三方渲染引擎的植入,例…

PowerShell报错 about_Execution_Policies 解决方法

在用express创建项目中显示项目创建失败,报错如图所示,显示无法加载文件,按照提示地址https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies看到页面显示是PowerShell执行策略的问题。有问题评论区留言,…

前端构建工具Vite

前端主流框架Vue大家应该都耳熟能详,很多的公司和项目都在使用,以前前端构建工具用的比较多的是webpack,后面渐渐地出现了Vite,它受到大家的喜爱和使用,那大家是否也很想知道它的由来以及优势,为什么越来越…

用户提交订单业务

文章目录 概要整体架构流程技术细节小结 概要 我们通常指的是在电子商务或在线零售环境中,顾客通过互联网完成商品或服务购买的过程。随着互联网技术的发展和普及,越来越多的消费者选择在线购物,这不仅因为其便捷性,还因为它提供…

Linux网络-小结

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux服务器作为一个常用的网络服务器,主要的作用就是向客户端提供网络…