Python忽略NoData计算多张遥感影像的像元平均值:whitebox库

这篇具有很好参考价值的文章主要介绍了Python忽略NoData计算多张遥感影像的像元平均值:whitebox库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  本文介绍基于Pythonwhitebox模块,对大量长时间序列栅格遥感影像的每一个像元进行忽略NoData值多时序平均值求取。

  在文章Python ArcPy批量计算多时相遥感影像的各像元平均值中,我们介绍了基于PythonArcpy模块实现多时相遥感影像数据的平均值求取方法。但是这一方法具有一个问题,即对于任意一个像元,只要该像元在任意一个时相的图像中是无效值(即为NoData),那么该像元在最终求出的平均值结果图中像素值也将会是无效值NoData。这就导致在我们最终计算得到的平均值结果图层中,具有很多空白区域(像素值为NoData的区域)。

  为了解决这一问题,这里我们再介绍一种基于Python中另一个地理空间数据分析库——whitebox,实现多时像遥感影像数据逐像元平均值的求取方法。

  首先,需要下载并安装whitebox这一模块。如果大家电脑中已经有了Anaconda环境,就可以直接按照Python地理分析库whitebox在Anaconda中的配置这篇文章中介绍的方法下载、安装whitebox

  本文要实现的需求和文章Python ArcPy批量计算多时相遥感影像的各像元平均值中的一致,这里就不再赘述。本文所需用到的代码如下。

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 17 15:04:29 2022

@author: fkxxgis
"""

import glob
from whitebox import WhiteboxTools

tif_file_path="E:/LST/Data/MODIS/test/"
average_file_path="E:/LST/Data/MODIS/06_Average/"

wbt=WhiteboxTools()
wbt.work_dir=tif_file_path

tif_file_name=glob.glob(tif_file_path+"*.tif")
tif_file_year=tif_file_name[0][-18:-14]
one_year_tif_list=[]

for tif_file in tif_file_name:
    if tif_file[-18:-14]==tif_file_year:
        one_year_tif_list.append(tif_file)
        tif_file_temp=tif_file
        if tif_file==tif_file_name[len(tif_file_name)-1]:
            wbt.average_overlay(inputs=';'.join(one_year_tif_list),
                                output=average_file_path+tif_file_year+"_Ave.tif")
    else:
        wbt.average_overlay(inputs=';'.join(one_year_tif_list),
                            output=average_file_path+tif_file_year+"_Ave.tif")
        one_year_tif_list=[]
        one_year_tif_list.append(tif_file)
        tif_file_year=tif_file[-18:-14]

  其中,tif_file_path是原有计算平均值前遥感图像的保存路径,average_file_path是我们新生成的求取平均值后遥感影像的保存路径,也就是结果保存路径。

  上述代码的整体思路其实和文章Python ArcPy批量计算多时相遥感影像的各像元平均值这篇文章是非常类似的。首先,同样需要在资源管理器中,将tif_file_path路径下的各文件以“名称”排序的方式进行排序;随后,利用arcpy.ListRasters()函数,获取路径下原有的全部.tif格式的图像文件,并截取第一个文件的部分文件名,从而获取其成像时间的具体年份。

  接下来,遍历tif_file_path路径下全部.tif格式图像文件。其中,我们通过一个简单的判断语句if tif_file[0:4]==tif_file_year:,来确定某一年的遥感影像是否已经读取完毕——如果已经读取完毕,例如假如2001年成像的8幅遥感影像都已经遍历过了,那么就对这8景遥感影像加以逐像元的平均值求取,并开始对下一个年份(即2005年)成像的遥感影像继续加以计算;如果还没有读取完毕,例如假如2001年成像的8幅遥感影像目前仅遍历到了第5幅,那么就不求平均值,继续往下遍历,直到遍历完2001年成像的8幅遥感影像。

  这里相信大家也看到了为什么我们要在前期先将文件夹中的文件按照“名称”排序——是为了保证同一年成像的所有遥感影像都排列在一起,遍历时只要遇到一个新的年份,程序就知道上一个年份的所有图像都已经遍历完毕了,就可以将上一个年份的所有栅格图像加以平均值求取。

  本文代码和前期博客中代码不一样的部分就在于,这里是用到whitebox模块而非arcpy模块来实现同一年份遥感影像的逐像元平均值求取。在这里,wbt.average_overlay()函数就是我们实现这一步骤的关键,其中inputs参数表示需要进行平均值计算的同一年份的所有遥感影像,output表示求取平均值后得到的结果图像。

  最后,通过if tif_file==tif_file_name[len(tif_file_name)-1]:这个判断,来确认是否目前已经遍历到文件夹中的最后一个图像文件。如果是的话,就需要将当前成像年份的所有图像进行平均值的求取,并宣告代码完成运行。

  这里需要注意,由于我们在此没有用到arcpy模块,因此代码也就不一定非要在 IDLE (Python GUI) 中运行了,常见的编译器都可以运行。在代码运行过程中,还可以看到具体运行情况与进度。

Python忽略NoData计算多张遥感影像的像元平均值:whitebox库

  代码运行完毕后,即可得到求解平均值后的结果图层。

  最后还有一个问题——在我用这一代码进行实践后发现,如果计算平均值前的图层具有两个或两个以上的波段,那么得到的结果图层整体看还好,如下图所示。

Python忽略NoData计算多张遥感影像的像元平均值:whitebox库

  但放大后,会发现得到的结果呈现出如下所示的条带状。

Python忽略NoData计算多张遥感影像的像元平均值:whitebox库

  而如果计算平均值前的图层仅具有一个波段的话,就不会出现这种问题;如下图所示。

Python忽略NoData计算多张遥感影像的像元平均值:whitebox库

  因此,大家在使用本文的代码对大量长时间序列栅格遥感影像的每一个像元进行忽略Nodata值多时序平均值求取时,一定注意输入图层要仅含有一个波段;否则结果就会出现条带状的错误。文章来源地址https://www.toymoban.com/news/detail-445468.html

到了这里,关于Python忽略NoData计算多张遥感影像的像元平均值:whitebox库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于python与GDAL获取遥感影像

    最近做项目,发现网上关于利用python与GDAL读取遥感影像数据的资料比较少。因此整理了一些,以方便自己学习。      1.首先确认自己电脑上安装好python版的GDAL库。这个会以后有时间慢慢整理。       2. 导入gdal库          from osgeo import gdal       3. 注册GDAL库   

    2023年04月25日
    浏览(31)
  • 遥感影像/无人机航片的空间分辨率GSD计算推导

    参考资料1 参考资料2-地面分辨率,空间分辨率(GSD为地面采样间隔) GSD:无人机/遥感卫星的空间分辨率,指航片/遥感影像一个像素点代表的空间距离。 IFoV:单个像素代表的空间范围。 幅宽:成像的画面所对应的空间距离。 如何通过无人机的飞行高度、镜头参数计算GSD、幅宽

    2024年02月08日
    浏览(64)
  • 【Python&RS】基于GDAL镶嵌拼接遥感影像

            没啥好说的,处理高分辨率影像时,数据高达几十G。用ENVI或者ArcGIS进行影像的拼接时,往往会出现未响应的情况。出现未响应的话,运气好等个一晚上可能会动一动,运气不好就等着强制关闭重做吧。         所以搞了一个Python进行拼接操作的代码,虽然速度不

    2024年02月02日
    浏览(26)
  • 如何解决GEE导出影像的Nodata值在ArcGIS中无法正常显示?

    目录 01 ArcGIS对于GEE掩膜影像的Nodata值的说明 02 处理方法 2.1 方法1-GEE修改掩膜值 Arguments: Returns: Image 2.2 方法2-ArcGIS重新赋值Nodata(推荐) 当在GEE中进行掩膜后,将影像在ArcGIS中显示如图:  周围的背景值为黑色,通过识别工具点击发现周围值为Nodata:    猜测ArcGIS可以识别

    2024年02月09日
    浏览(31)
  • 遥感影像的缨帽(K-T)变换Python实现

    缨帽变换(Kirchhoff Transform,K-T变换) 是一种在遥感图像处理中常用的技术,它可以有效地提取地物的空间特征和频谱信息。本文将对遥感缨帽变换的提出者、原理方法、公式、现在的发展、作用进行详细介绍,并附有相应的图解。 TM影像的前三个分量的物理意义: ●亮度:

    2024年02月11日
    浏览(28)
  • (五)Landat_5 TM 遥感影像计算NDVI、MNDWI、NDBI以及地表温度反演

    所谓植被指数,就是利用多波段遥感图像的可见光波段以及近红外波段相组合,形成能够反映突出植被分布状况和强度的指数。植被指数的求解方法不唯一,定义的植被指数已经多达50多种。通过红波段以及近红外波段,可以有效的消除大气对植被指数的影响。 公式: NDVI=(

    2024年02月11日
    浏览(27)
  • 利用Python对含有地理信息的遥感影像,使用随机森林模型回归,并保存预测影像

    最近在做随机森林回归实验时,遇到了一个问题: 在做回归时,用的是excel点数据做的回归,像这样: 但是如何把这个训练好的模型应用到整幅含有地理信息的遥感影像上去,并保存这个预测图像呢?对这个问题,展开了一些思考,废话不多说,直接上代码。 导入数据,这

    2024年04月16日
    浏览(31)
  • 【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)

    ​         GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。         Python的GDAL库作为栅格数据的处理转换库,其支持几百种栅格数

    2024年02月08日
    浏览(33)
  • python:使用Scikit-image对遥感影像进行梯度特征提取(gradient)

    作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行梯度特征提取(gradient),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 梯度特征是指用于表示图像中亮度或颜色变化的特征。它包括两个关键成分:梯度幅值和梯度方向。梯度

    2024年02月08日
    浏览(49)
  • python:使用Scikit-image对遥感影像进行傅里叶变换特征提取(fourier)

    作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行傅里叶变换特征提取(fourier),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 傅里叶变换特征提取是一种数学工具,用于将图像中的细节、纹理和边缘信息以不同频率的方式呈

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包