基于Python 进行卫星图像多种指数分析
一、前言
本文帮助读者更好地了解卫星数据以及使用 Python 探索和分析哨兵2卫星数号数据在Sundarbans地区的不同方法。
二、Sundarbans研究区
孙德尔本斯(Sundarbans)是恒河、雅鲁藏布江和梅克纳河在孟加拉湾汇合形成的三角洲中最大的红树林区之一。 孙德尔本斯森林横跨印度和孟加拉国,面积约 10,000 平方公里,其中 40% 位于印度境内,是许多珍稀和全球受威胁野生动物物种的家园。 下面的谷歌地图显示了孙德尔本斯地区。

在本文中,我们将使用2020年1月27日使用Sentinel-2卫星获取的Sundarbans卫星数据的一小部分。该Sundarbans数据的优化自然色图像如下所示:

卫星数据有 954 * 298 像素,12 个波段,光谱分辨率从 10 — 60 米不等。
三、数据分析
为了对 Sundarbans 数据执行不同的操作,我们将使用 EarthPy、RasterIO、Matplotlib、Plotly 等库进行数据可视化和分析。
让我们通过导入必要的包开始编码:
from glob import globimport earthpy as et
import earthpy.spatial as es
import earthpy.plot as epimport rasterio as rioimport matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormapimport plotly.graph_objects as gonp.seterr(divide='ignore', invalid='ignore')
(1)数据读取
让我们使用 rasterio 读取 12 个波段,并使用 numpy.stack() 方法将它们堆叠到一个 n 维数组中。 堆叠后的结果数据具有形状 (12, 954, 298)。
S_sentinel_bands = glob("/content/drive/MyDrive/Satellite_data/sundarbans_data/*B?*.tiff")S_sentinel_bands.sort()l = []for i in S_sentinel_bands:with rio.open(i, 'r') as f:l.append(f.read(1))arr_st = np.stack(l)
(2)波段可视化
正如我们所讨论的,数据包含 12 个波段。 让我们使用 EarhPy 包可视化每个波段。 plot_bands() 方法获取波段和绘图的堆栈以及自定义标题,这可以通过使用 title= 参数将每个图像的唯一标题作为标题列表传递来完成。
ep.plot_bands(arr_st, cmap = 'gist_earth', figsize = (20, 12), cols = 6, cbar = False)
plt.show()

(3)RGB波段合成
研究区有多个波段,包含从可见光到红外线的数据。 因此很难为人类可视化数据。 通过创建 RGB 合成图像,可以更轻松有效地理解数据。 要绘制 RGB 合成图像,您将绘制红色、绿色和蓝色波段,它们分别是波段 4、3 和 2。 由于 Python 使用从零开始的索引系统,因此您需要从每个索引中减去 1 的值。 因此,红色波段的索引为 3,绿色为 2,蓝色为 1。
如果像素亮度值偏向零值,我们创建的合成图像有时会变暗。 此类问题可以通过拉伸图像中的像素亮度值来解决,使用参数 stretch=True 将值扩展到潜在值的完整 0-255 范围,以增加图像的视觉对比度。 此外,str_clip 参数允许您指定要剪掉多少数据尾部。 数字越大,数据被拉伸或变亮的程度就越大。
让我们看看绘制 RGB 合成图像以及应用拉伸的代码。
# RGB Composite Imagergb = ep.plot_rgb(arr_st, rgb=(3,2,1), figsize=(10, 16))
plt.show()# RGB Composite Image with Strechep.plot_rgb(arr_st,rgb=(3, 2, 1),stretch=True,str_clip=0.2,figsize=(10, 16))
plt.show()

上图显示了应用拉伸前后孙德尔本斯数据的 RGB 合成图像。
(4)直方图
可视化高光谱图像数据集的波段有助于我们了解波段像素/值的分布。 earhtpy.plot 中的 hist 方法通过为我们之前创建的数据集/堆栈的波段绘制直方图来完成这项工作。 我们还可以修改各个直方图的列大小、标题和颜色。 让我们看看绘制直方图的代码。
colors = ['tomato', 'navy', 'MediumSpringGreen', 'lightblue', 'orange', 'blue','maroon', 'purple', 'yellow', 'olive', 'brown', 'cyan']ep.hist(arr_st, colors = colors,title=[f'Band-{i}' for i in range(1, 13)], cols=3, alpha=0.5, figsize = (12, 10))plt.show()

(5)植被和土壤指数
归一化卫星指数是根据多光谱卫星图像计算得出的图像。 这些图像强调存在的特定现象,同时减轻降低图像效果的其他因素。 例如,植被指数将在索引图像中将健康的植被显示为明亮,而不健康的植被具有较低的值,贫瘠的地形是黑暗的。 由于地形变化(山丘和山谷)的阴影会影响图像的强度,因此创建指数的方式是强调对象的颜色而不是对象的强度或亮度。
归一化植被指数 (NDVI)
要确定一块土地上的绿色密度,研究人员必须观察植物反射的可见光 (VIS) 和近红外 (NIR) 阳光的不同颜色(波长)。 归一化差异植被指数 (NDVI) 通过测量植被强烈反射的近红外光和红光(植被吸收的)之间的差异来量化植被。 NDVI 的范围总是从 -1 到 +1。
NDVI = ((NIR - Red)/(NIR + Red))
例如,当你有负值时,它很可能是水。 另一方面,如果您的 NDVI 值接近 +1,则它很可能是茂密的绿叶。 但当 NDVI 接近于零时,就没有绿叶,甚至可能是城市化区域。
让我们看看在 Sundarbans 卫星数据上实现 NDVI 的代码。
ndvi = es.normalized_diff(arr_st[7], arr_st[3])ep.plot_bands(ndvi, cmap="RdYlGn", cols=1, vmin=-1, vmax=1, figsize=(10, 14))plt.show()

土壤调整植被指数 (SAVI)
土壤调整植被指数 (SAVI) 是一种植被指数,它试图使用土壤亮度校正因子来最小化土壤亮度的影响。 这通常用于植被覆盖率低的干旱地区。
SAVI = ((NIR - Red) / (NIR + Red + L)) x (1 + L)
L 值根据绿色植被覆盖量而变化。 一般来说,在没有绿色植被覆盖的地区,L=1; 在中度绿色植被覆盖区,L=0.5; 在植被覆盖度很高的地区,L=0(相当于NDVI方法)。 该索引输出介于 -1.0 和 1.0 之间的值。 让我们看看SAVI的实现代码。
L = 0.5savi = ((arr_st[7] - arr_st[3]) / (arr_st[7] + arr_st[3] + L)) * (1 + L)ep.plot_bands(savi, cmap="RdYlGn", cols=1, vmin=-1, vmax=1, figsize=(10, 14))plt.show()

可见大气阻力指数 (VARI)
可见大气阻力指数 (VARI) 旨在强调光谱可见部分的植被,同时减轻光照差异和大气影响。 它是 RGB 或彩色图像的理想选择; 它利用了所有三个色带。
VARI = (Green - Red)/ (Green + Red - Blue)
vari = (arr_st[2] - arr_st[3])/ (arr_st[2] + arr_st[3] - arr_st[1])ep.plot_bands(vari, cmap="RdYlGn", cols=1, vmin=-1, vmax=1, figsize=(10, 14))plt.show()

(6)水体指数
地表水变化是环境、气候和人类活动的一个非常重要的指标。 遥感器,例如 sentinel-2、Landsat,在过去四十年中一直在提供数据,这些数据对于提取土地覆盖类型(例如森林和水)很有用。 研究人员提出了许多地表水提取技术,其中基于指数的方法因其简单性和成本效益而广受欢迎。
修正归一化差水指数 (MNDWI)
修正归一化差异水域指数 (MNDWI) 使用绿色和 SWIR 波段来增强开放水域特征。 它还减少了在其他指数中通常与开阔水域相关的建成区特征。
MNDWI = (Green - SWIR) / (Green + SWIR)
下面的代码用于实现 MNDWI,输出如下所示。
mndwi = es.normalized_diff(arr_st[2], arr_st[10])ep.plot_bands(mndwi, cmap="RdYlGn", cols=1, vmin=-1, vmax=1, figsize=(10, 14))plt.show()

归一化差异水分指数 (NDMI)
归一化差异水分指数 (NDMI) 对植被中的水分含量很敏感。 它用于监测干旱以及监测火灾多发地区的燃料水平。 它使用 NIR 和 SWIR 波段来创建旨在减轻照明和大气影响的比率。
NDMI = (NIR - SWIR1)/(NIR + SWIR1)
让我们看看实现和输出:
ndmi = es.normalized_diff(arr_st[7], arr_st[10])ep.plot_bands(ndmi, cmap="RdYlGn", cols=1, vmin=-1, vmax=1, figsize=(10, 14))plt.show()

(6)地质指数
事实证明,卫星图像和航空摄影是支持矿产勘探项目的重要工具。 它们可以以多种方式使用。 首先,它们为地质学家和现场工作人员提供轨道、道路、围栏和居住区的位置。
粘土矿物
Clay Minerals Ratio = SWIR1 / SWIR2
cmr = np.divide(arr_st[10], arr_st[11])ep.plot_bands(cmr, cmap="RdYlGn", cols=1, vmin=-1, vmax=1, figsize=(10, 14))plt.show()

黑色金属矿产
黑色金属矿物比例突出了含铁材料。 它使用 SWIR 波段和 NIR 波段之间的比率。
Ferrous Minerals Ratio = SWIR / NIR
fmr = np.divide(arr_st[10], arr_st[7])ep.plot_bands(fmr, cmap="RdYlGn", cols=1, vmin=-1, vmax=1, figsize=(10, 14))plt.show()

四、结论
本文介绍了数据可视化和归一化植被、水和地质指数等不同方法,以使用 python 分析 Sundarbans 研究区卫星数据。
相关文章:

基于Python 进行卫星图像多种指数分析
一、前言本文帮助读者更好地了解卫星数据以及使用 Python 探索和分析哨兵2卫星数号数据在Sundarbans地区的不同方法。二、Sundarbans研究区孙德尔本斯(Sundarbans)是恒河、雅鲁藏布江和梅克纳河在孟加拉湾汇合形成的三角洲中最大的红树林区之一。 孙德尔…...
(Week 15)综合复习(C++,字符串,数学)
文章目录T1 [Daimayuan]删删(C,字符串)输入格式输出格式样例输入样例输出数据规模解题思路T2 [Daimayuan]快快变大(C,区间DP)输入格式输出格式样例输入样例输出数据规模解题思路T3 [Daimayuan]饿饿 饭饭2&a…...

迪赛智慧数——柱状图(正负条形图):“光棍”排行榜TOP10省份
效果图 中国单身男女最多的省份是广东,广东的人口是全国最多的。人口多了,单身的人也会多,单身女性324万,男性498万。全国第二的省份是四川省,单身女性256万,单身男性296万。 数据源:静态数据…...

IDEA集成chatGTP让你编码如虎添翼
第一步,打开您的IDEA, 打开首选项(Preference) -> 插件(Plugin) 在插件市场搜索 chatGPT, 点击安装 安装完毕后会提示您重启IDE, 重启IDEA. 重启后您会发现窗口,右边条上 竖着挂着个chatGPT按钮了。 第二步、配置APIkey或accessToken(二选一,推荐accessToken无费用…...
Python3 os.close() 方法、Python3 File readline() 方法
Python3 os.close() 方法 概述 os.close() 方法用于关闭指定的文件描述符 fd。 语法 close()方法语法格式如下: os.close(fd);参数 fd -- 文件描述符。 返回值 该方法没有返回值。 实例 以下实例演示了 close() 方法的使用: #!/usr/bin/python3…...

Vision Pro 自己写的一些自定义工具(c#)
目录前言一、保存图片工具1、展示2、源码下载地址二、3D图片格式转化1、展示2、源码下载地址三、所有工具汇总下载地址前言 自己用c#写的一些visionPro自定义工具,便于使用的时候直接拿出来,后续会不断添加新的工具。 想看怎么使用c#写visionPro自定义…...

ARM/FPGA/DSP板卡选型大全,总有一款适合您
创龙科技ARM/FPGA/DSP嵌入式板卡选型大全2023.2版本正式发布!接下来,跟着我们一起看看有哪些亮点吧! 6大主流工业处理器原厂 创龙科技现有30多条产品线,覆盖工业自动化、能源电力、仪器仪表、通信、医疗、安防等工业领域,与6大主流工业处理器原厂强强联合,包括德州仪器…...

【C语言蓝桥杯每日一题】—— 既约分数
【C语言蓝桥杯每日一题】—— 既约分数😎前言🙌既约分数🙌递归版解题代码:😍非递归版解题代码:😍总结撒花💞既约分数😎)😎博客昵称:博客小梦 &…...

【机器学习】线性回归
文章目录前言一、单变量线性回归1.导入必要的库2.读取数据3.绘制散点图4.划分数据5.定义模型函数6.定义损失函数7.求权重向量w7.1 梯度下降函数7.2 最小二乘法8.训练模型9.绘制预测曲线10.试试正则化11.绘制预测曲线12.试试sklearn库二、多变量线性回归1.导入库2.读取数据3.划分…...

用ChatGPT学习多传感器融合中的基础知识
困惑与解答: 问题:匈牙利算法中的增广矩阵路径是什么意思 解答: 匈牙利算法是解决二分图最大匹配的经典算法之一。其中的增广矩阵路径指的是在当前匹配下,从一个未匹配节点开始,沿着交替路(交替路是指依次…...
PyCharm2020介绍
PyCharm2020PyCharm2020安装过程PyCharm2020安装包1、PyCharm2020介绍2、PyCharm2020特点3、PyCharm2020特点4、PyCharm2020PyCharm2020安装过程 PyCharm2020安装过程安装步骤点击此链接。 PyCharm2020安装包 链接:https://pan.baidu.com/s/19R3nJx6wMyNBU9oY4N4n…...

Le Potato + Jumbospot MMDVM热点盒子
最近才留意到,树莓派受到编程圈一定瞩目之后,智慧的同胞早已悄咪咪的搞了一堆xx派出来,本来对于香橙派,苹果派,土豆派和香蕉派是不感冒的,但是因为最近树莓派夸张的二级市场价格和断供,终于还是…...

蓝桥杯第19天(Python)(疯狂刷题第2天)
题型: 1.思维题/杂题:数学公式,分析题意,找规律 2.BFS/DFS:广搜(递归实现),深搜(deque实现) 3.简单数论:模,素数(只需要…...

(五)手把手带你搭建精美简洁的个人时间管理网站—基于Axure的首页原型设计
🌟所属专栏:献给榕榕🐔作者简介:rchjr——五带信管菜只因一枚 😮前言:该专栏系为女友准备的,里面会不定时发一些讨好她的技术作品,感兴趣的小伙伴可以关注一下~👉文章简介…...
阿里面试:为什么MySQL不建议使用delete删除数据?
MySQL是一种关系型数据库管理系统,它的数据存储是基于磁盘上的文件系统实现的。MySQL将数据存储在表中,每个表由一系列的行和列组成。每一行表示一个记录,每一列表示一个字段。表的结构由其列名、数据类型、索引等信息组成。 MySQL的数据存储…...

低代码开发公司:用科技强力开启产业分工新时代!
实现办公自动化,是不少企业的共同追求。低代码开发公司会遵循时代发展规律,注入强劲的科技新生力量,在低代码开发市场厚积爆发、努力奋斗,推动企业数字化转型升级,为每一个企业的办公自动化升级创新贡献应有的力量。 一…...
参考mfa官方文档实践笔记(亲测)
按顺序执行以下指令: conda create -n aligner -c conda-forge montreal-forced-alignerconda config --add channels conda-forgeconda activate alignerconda install pytorch torchvision torchaudio pytorch-cuda11.7 -c pytorch -c nvidia 如果报错࿱…...
【 第六章 拦截器,注解配置springMVC,springMVC执行流程】
第六章 拦截器,注解配置springMVC,springMVC执行流程 1.拦截器: ①springMVC中的拦截器用于拦截控制器方法的执行。 ②springMVC的拦截器需要实现HandlerInterceptor或者继承HandlerInterceptorAdapter类。 ③springMVC的拦截器必须在spring…...

一种编译器视角下的python性能优化
“Life is short,You need python”!老码农很喜欢python的优雅,然而,在生产环境中,Python这样的没有优先考虑性能构建优化的动态语言特性可能是危险的,因此,流行的高性能库如TensorFlow 或PyTor…...

太逼真!这个韩国虚拟女团你追不追?
“她们看上去太像真人了”, 韩国虚拟女团MAVE的首支MV和打歌舞台引发网友阵阵惊呼。现在,她们的舞蹈已经有真人在挑战了。 这一组虚拟人的“逼真”倒不在脸,主要是MAVE女团的舞台动作接近自然,不放近景看,基本可以达到…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...