NDVI数据集提取植被覆盖度FVC

news2024/9/22 6:57:46

植被覆盖度FVC

植被覆盖度(Foliage Vegetation Cover,FVC)是指植被冠层覆盖地表的面积比例,通常用来描述一个区域内植被的茂密程度或生长状况。它是生态学、环境科学以及地理信息系统等领域的重要指标,对于理解地表能量平衡、水文循环、碳循环等生态过程至关重要。

植被覆盖度可以通过地面调查、遥感和地理信息系统等技术手段来测量。在遥感应用中,通常使用植被指数(如归一化植被指数NDVI)来估算植被覆盖度。这些指数反映了植被的健康状况和生物量,是监测植被变化、评估生态系统健康和进行环境变化研究的重要工具。

FVC的计算公式(参考文献Cui et al.,2023):
NDVImin为累计像元值5%的值,NDVImax为累计像元值95%的值
FVC的取值范围为[0,1]
在这里插入图片描述
表格参考自知乎用户@24K知识星球。
在这里插入图片描述

NDVI数据集

本次NDVI数据集选择的是GIMMS-3G+数据集,下载网址:GIMMS-3G+
我下载了2022年下半年的数据,数据格式是nc文件

首先用R语言将nc文件拆分成按月划分的tif文件

library(raster)
library(ncdf4)
ndvi<-brick("ndvi3g_geo_v1_2_2022_0712.nc4",varname="ndvi")
writeRaster(ndvi,filename = ndvi@data@names,bylayer=T,format="GTiff",overwrite=TRUE)

这样就获得了按月划分的tif文件。比如7月的文件为X2022.07.tif
由于比例系数是0.0001,所以每个波段的数值需要乘以0.0001
利用R语言将像元数值缩小10000倍。

library(raster)
library(sp)

# 打开.tif文件
input_file <- "X2022.07.tif"
output_file <- "X2022.07.scaled.tif"
raster_data <- raster(input_file)

# 获取波段的最小值和最大值
min_value <- minValue(raster_data)
max_value <- maxValue(raster_data)

# 设置新的最小值和最大值范围
new_min <- min_value/10000
new_max <- max_value/10000

# 调整波段范围
adjusted_raster <- ((raster_data - min_value) / (max_value - min_value)) * (new_max - new_min) + new_min

# 保存修改后的.tif文件
writeRaster(adjusted_raster, output_file, format="GTiff")

利用QGIS查看下归一化后的NDVI文件如下:
在这里插入图片描述
海洋部分的无数据nodata,冰覆盖的数值为-0.3
在这里插入图片描述
由于冰覆盖的数值较多,我不想让该数值影响到NDVImin和NDVImax值的计算,故写了一个python脚本将-0.3的值变成nodata

import rasterio

# 打开NDVI TIF文件
with rasterio.open('X2022.07.scaled.tif') as src:
    # 读取NDVI数据
    ndvi = src.read(1)

    # 判断是否有Nodata
    nodata = src.nodata
    if nodata is None:
        print('没有空数据')
    else:
        print(nodata)

    # 将NDVI值为-0.3的像素赋值为NoData
    ndvi[(ndvi == -0.3)] = nodata

    # 复制源文件的元数据
    profile = src.profile

    # 更新NoData值
    profile['nodata'] = nodata

    # 保存新的TIF文件
    with rasterio.open('X2022.07.scaled2.tif', 'w', **profile) as dst:
        dst.write_band(1, ndvi)

去除-0.3后的tif文件QGIS展示:
在这里插入图片描述
然后再利用python计算NDVImin和NDVImax

import rasterio
import numpy as np

# 打开NDVI栅格数据
with rasterio.open('X2022.07.scaled2.tif') as src:
    ndvi = src.read(1)  # 假设NDVI是在第一个波段

# 判断是否有Nodata
nodata = src.nodata
if nodata is None:
    print('没有空数据')
else:
    print(nodata)

# 排除NoData值。NoData的值需要排除,不然会影响到NDVImin和NDVImax的计算结果。
ndvi_valid = ndvi[(ndvi != nodata)]
print(ndvi_valid)

# 计算5%和95%作为最小值和最大值
ndvi_min = np.percentile(ndvi_valid, 5)
ndvi_max = np.percentile(ndvi_valid, 95)

print(f"NDVI最小值: {ndvi_min}")
print(f"NDVI最大值: {ndvi_max}")

终端显示:

-3.3999999521443642e+38
[-0.0356 -0.0511 -0.0456 ...  0.4683  0.5181  0.565 ]
NDVI最小值: 0.0869000032544136
NDVI最大值: 0.8664000034332275

利用ENVI软件的快速统计功能同样也可以获取累计百分数为5%和95%的值,结果和python运算的结果差不多。
在这里插入图片描述
接下来,就可以利用QGIS的栅格计算器功能获取FVC了。
QGIS中的栅格计算器在Raster(栅格)选项栏中。
根据FVC的计算公式输入栅格计算表达式:

 ( "X2022.07.scaled2@1"  - 0.0869000032544136 )  /  ( 0.8664000034332275 - 0.0869000032544136) 

在这里插入图片描述
这样,就获得了FVC的图如下。可以看到取值不在0-1之间,所以需要将小于0的值都赋值为0,大于1的部分赋值为1,其余部分为其本身的值。
在这里插入图片描述
再次利用栅格计算器,将FVC的值调整到0-1之间。
栅格计算表达式:

("X202207FVC@1" < 0) * 0 + ("X202207FVC@1" > 1) * 1 + ("X202207FVC@1" >= 0 AND "X202207FVC@1" <= 1) * "X202207FVC@1"

在这里插入图片描述
现在就将FVC的值调整到0-1了。我还对图层的样式做了调整,突出显示了FVC<=0.2的地区
在这里插入图片描述

本文参考文献

1、Cui, B., Gui, D., Liu, Q., Abd‐Elmabod, S. K., Liu, Y., & Lu, B. (2024). Distribution and growth drivers of oases at a global scale. Earth’s Future, 12, e2023EF004086. https://doi.org/10.1029/2023EF004086
2、Pinzon, J.E., E.W. Pak, C.J. Tucker, U.S. Bhatt, G.V. Frost, and M.J. Macander. 2023. Global Vegetation Greenness (NDVI) from AVHRR GIMMS-3G+, 1981-2022. ORNL DAAC, Oak Ridge, Tennessee, USA. https://doi.org/10.3334/ORNLDAAC/2187

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

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

相关文章

A股继续3000以下震荡,而国外股市屡创新高,人民币反弹能带动A股吗?

今天的A股&#xff0c;让人愤愤不已&#xff0c;你知道是为什么吗&#xff1f;盘面上出现3个耐人寻味的重要信号&#xff0c;一起来看看&#xff1a; 1、今天两市一度回踩2920点&#xff0c;让股民的心都开始悬起来了。而午后市场行情有了转变&#xff0c;下跌的股票开始明显变…

Java -- 实现MD5加密/加盐

目录 1. 加密的引出2. MD5介绍3. 解决MD5不可解密方法4. 实现加密解密4.1 加密4.2 验证密码 1. 加密的引出 在MySQL数据库中&#xff0c;一般都需要把密码、身份证、电话号码等信息进行加密&#xff0c;以确保数据的安全性。如果使用明文来存储&#xff0c;当数据库被入侵的时…

自动化设备上位机设计 三

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using SqlSugar;namespace 自动化上位机设计 {public partial class Form1 : Form{SqlHelper sqlHelper new SqlHelper();SqlSugarClient dbContent null;bool IsRun false;int Count 0;public Form1(){Initializ…

C++初学者指南-4.诊断---基础:警告和测试

C初学者指南-4.诊断—基础知识&#xff1a;警告和测试 文章目录 C初学者指南-4.诊断---基础知识&#xff1a;警告和测试1. 术语和技术记住&#xff1a;使用专用类型&#xff01; 2.编译器警告Gcc/CLang 编译器选项MS Visual Studio 编译器选项 3.断言运行时断言静态断言&#x…

Spring容器Bean之XML配置方式

一、首先看applicationContext.xml里的配置项bean 我们采用xml配置文件的方式对bean进行声明和管理&#xff0c;每一个bean标签都代表着需要被创建的对象并通过property标签可以为该类注入其他依赖对象&#xff0c;通过这种方式Spring容器就可以成功知道我们需要创建那些bean实…

Docker-基础

一&#xff0c;Docker简介&#xff0c;功能特性与应用场景 1.1 Docker简介 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器…

2024年AI技术深入研究

2024年AI技术持续快速发展,应用领域广泛,产业发展迅速,市场趋势积极,学术研究深入。 AI技术进展大模型发展 2024年,智谱AI正在研发对标OpenAI Sora的高质量文生视频模型,预计最快年内发布。智谱AI的进展显示了国内AI大模型领域的快速发展,以及与国际领先技术的竞争态势…

PageCache页缓存

一.PageCache基本结构 1.PageCache任务 PageCache负责使用系统调用向系统申请页的内存,给CentralCache分配大块儿的内存,以及合并前后页空闲的内存,整体也是一个单例,需要加锁. PageCache桶的下标按照页号进行映射,每个桶里span的页数即为下标大小. 2.基本结构 当每个线程的…

【话题】AI是在帮助开发者还是取代他们

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 引言AI在代码生成中的应用AI在错误检测和自动化测试中的作用对开发者职业前景的影响技能需求的变化与适应策略结论文章推荐 引言 随着人工智能&#xff08;AI&#xff…

Python 获取tiktok视频评论回复数据 api接口

TIKTOK api接口 用于爬取tiktok视频评论回复数据 详细采集页面如图 https://www.tiktok.com/dailymail/video/7329872821990182190?qneural%20link&t1706783508149 请求API http://api.xxxx.com/tt/video/info/comment/reply?video_id7288909913185701125&comment_…

YOLOv8改进 | 注意力机制 | 结合静态和动态上下文信息的注意力机制

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

【Springer出版 | EI稳定检索】第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024,7月19-21)

由浙江工业大学主办&#xff0c;第五届物联网、人工智能与机械自动化国际学术会议 (IoTAIMA 2024) 将于2024年7月19-21日在浙江杭州召开。 会议旨在为从事物联网、人工智能与机械自动化的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学…

ubuntu22 sshd设置

专栏总目录 一、安装sshd服务 sudo apt updatesudo apt install -y openssh-server 二、配置sshd 使用文本编辑器打开/etc/ssh/sshd_config sudo vi /etc/ssh/sshd_config &#xff08;一&#xff09;配置sshd服务的侦听端口 建议将ssh的侦听端口改为7000以上的端口&#…

大数的排列组合公式C代码

我们知道&#xff0c;计算排列A(n,m)和组合C(n,m)可以用先求阶乘的方式实现&#xff0c;但是当数很大时求阶乘很容易溢出&#xff0c;所以这里给出非阶乘的方式求排列组合 求排列 分母和分子可以抵消&#xff0c;最后代码如下 unsigned long long A(int n, int m) {unsigned…

Buuctf之SimpleRev做法

首先&#xff0c;查个壳&#xff0c;64bit&#xff0c;那就丢进ida64中进行反编译进来之后&#xff0c;我们进入main函数&#xff0c;发现里面没什么东西&#xff0c;那就shiftf12搜索字符串&#xff0c;找到关键字符串&#xff0c;双击进入然后再选中该字符串&#xff0c;ctrl…

Android仿天眼查人物关系图

效果图预览 绘制思路 这里使用了中学解析几何知识 XPoint OPointX OPointXcosθ&#xff1b; YPoint OPointY OPointYsinθ&#xff1b; canvas.drawText(lists.get(i).getName(), XPoint (float) Math.cos(pere * i 5) * radius[i % radius.length] - 30, YPoint (fl…

TaskDisplayArea、ActivityStack、Task以及ActivityRecord之间的关系

目录 一、TaskDisplayArea、ActivityStack、TaskRecord以及ActivityRecord关系图 二、TaskDisplayArea、ActivityStack、Task以及ActivityRecord相关代码 1、ActivityRecord 2、Task 3、ActivityStack 4、TaskDisplayArea 前言&#xff1a;对TaskDisplayArea、ActivitySt…

【图解大数据技术】Flume、Kafka、Sqoop

【图解大数据技术】Flume、Kafka、Sqoop FlumeFlume简介Flume的应用场景 KafkaKafka简介Kafka架构Flume与Kafka集成 SqoopSqoop简介Sqoop原理sqoop搭配任务调度器实现定时数据同步 Flume Flume简介 Flume是一个数据采集工具&#xff0c;多用于大数据技术架构下的日志采集。 …

论文略读:Learning and Forgetting Unsafe Examples in Large Language Models

随着发布给公众的大语言模型&#xff08;LLMs&#xff09;数量的增加&#xff0c;迫切需要了解这些模型从第三方定制的微调数据中学习的安全性影响。论文研究了在包含不安全内容的噪声定制数据上微调的LLMs的行为&#xff0c;这些数据集包含偏见、毒性和有害性 发现虽然对齐的L…

尚庭公寓——数据库设计

1. 数据的关系 一对一&#xff0c;一对多&#xff08;多对一&#xff09;&#xff0c;多对多 2. 实体关系模型 实体关系模型常用ER图&#xff08;enity relationship graph&#xff09;表示&#xff1b; 矩形表示实体&#xff08;类似Java中的对象&#xff0c;如学生就是一…