Python忽略NoData计算多张遥感影像的像元平均值:whitebox库
本文介绍基于Python中whitebox模块,对大量长时间序列栅格遥感影像的每一个像元进行忽略NoData值的多时序平均值求取。
在文章Python ArcPy批量计算多时相遥感影像的各像元平均值中,我们介绍了基于Python中Arcpy模块实现多时相遥感影像数据的平均值求取方法。但是这一方法具有一个问题,即对于任意一个像元,只要该像元在任意一个时相的图像中是无效值(即为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) 中运行了,常见的编译器都可以运行。在代码运行过程中,还可以看到具体运行情况与进度。

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

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

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

因此,大家在使用本文的代码对大量长时间序列栅格遥感影像的每一个像元进行忽略Nodata值的多时序平均值求取时,一定注意输入图层要仅含有一个波段;否则结果就会出现条带状的错误。
Python忽略NoData计算多张遥感影像的像元平均值:whitebox库的更多相关文章
- Python ArcPy批量计算多时相遥感影像的各项元平均值
本文介绍基于Python中ArcPy模块,对大量长时间序列栅格遥感影像文件的每一个像元进行多时序平均值的求取. 在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取-- ...
- Python gdal读取MODIS遥感影像并结合质量控制QC波段掩膜数据
本文介绍基于Python中GDAL模块,实现MODIS遥感影像数据的读取.计算,并基于质量控制QC波段进行图像掩膜的方法. 前期的文章Python GDAL读取栅格数据并基于质量评估波段QA对 ...
- Python核对遥感影像批量下载情况的方法
本文介绍批量下载遥感影像时,利用Python实现已下载影像文件的核对,并自动生成未下载影像的下载链接列表的方法. 批量下载大量遥感影像数据对于GIS学生与从业人员可谓十分常见.然而,对于动辄成 ...
- Python ArcPy批量掩膜、重采样大量遥感影像
本文介绍基于Python中ArcPy模块,对大量栅格遥感影像文件进行批量掩膜与批量重采样的操作. 首先,我们来明确一下本文的具体需求.现有一个存储有大量.tif格式遥感影像的文件夹:且其中除了 ...
- 遥感影像和DEM数据获取处理、GeoServer切片发布并使用Cesium加载
1. 数据获取 笔者这里使用的是哨兵一号(Sentinel-1).ALOS的遥感影像和ALOS的DEM数据 下载地址为:ASF Data Search (alaska.edu) ASF(Alaska ...
- 批量下载Landsat遥感影像的方法
本文介绍在USGS网站批量下载Landsat系列遥感影像的方法. 首先,打开EarthExplorer的官网,首先完成注册与登录. 接下来,点击左侧"Search Criteri ...
- 遥感影像滤波处理软件 — timesat3.2
最近因为要做遥感影像的滤波处理,经过女神推荐,决定用Timesat,可是该软件3.1版本只适合xp系统以及2011的matlab,后来在官网上找到了最新的3.2版本.支持64位操作系统以及2014的m ...
- 使用python做科学计算
这里总结一个guide,主要针对刚开始做数据挖掘和数据分析的同学 说道统计分析工具你一定想到像excel,spss,sas,matlab以及R语言.R语言是这里面比较火的,它的强项是强大的绘图功能以及 ...
- 在matlab中进行遥感影像地理坐标的相互转换
在matlab中进行图像处理,一般使用的都是图像本地坐标,以左上角(1,1)开始.处理完成后,如果要将结果在带地理坐标的遥感影像中显示,或者需要输出成shp文件,就需要涉及到本地坐标和地理坐标的转换, ...
- 在matlab中实现遥感影像和shp文件的结合显示
clc;close all;clear; road=shaperead('boston_roads.shp'); %读取shape文件 figure, mapshow('boston.tif'); % ...
随机推荐
- 如何加快打开网页的速度------通过调节“QoS数据包计划程序”的“限制可保留宽带”实现&如何解决win10可能找不到gpedit.msc的问题
参考:http://www.windowszj.com/news/win10/42119.html http://www.docin.com/p-1510367352.html(QoS数据包计划程序有 ...
- [极客大挑战 2019]BuyFlag 1
好吧,又是一道违背我思想的题目,哦不哦不不对,是本人操作太傻了 首先进入主页面 没有发现什么奇怪的东西,查看源代码,搜索.php 可以看到有一个pay.php,访问查看 给我们了一些提示 FLAG N ...
- 【RSocket】使用 RSocket(二)——四种通信模式实践
Source Code: https://github.com/joexu01/rsocket-demo 0. 四种通信模式 让我们来简单复习一下 RSocket 的四种通信模式: 即发即忘 - Fi ...
- Android Studio报错--Build failed with an exception.
错误描述 在代码写好之后,点击运行,会爆出这样的错误,查看日志,发现是Manifest.xml文件爆出来的错误 具体解决 我的错误没有别的版本那么麻烦,就是我建立了Empty Activity之后,我 ...
- Activiti7开发(四)-我的待办
目录 1. 查询登录用户的待办任务 2.审批 1. 查询登录用户的待办任务 private List<Task> queryMyTasks(){ String username = Sec ...
- 141. Linked List Cycle (Easy)
ps:能力有限,若有错误及纰漏欢迎指正.交流 Linked List Cycle (Easy) https://leetcode.cn/problems/linked-list-cycle/descr ...
- 给生活加点惊喜,做创意生活的原型设计师丨编程挑战赛 x 选手分享
前言 做产品的大都跳过一个坑:我有了一个很好的产品创意,只差一个程序员帮我实现编程了. 事实上从产品创意到落地上线,中间需要经过非常复杂的过程,细节的逻辑流程才是难点,创意不能落地,并不值钱. 本文作 ...
- 最强分布式搜索引擎——ElasticSearch
最强分布式搜索引擎--ElasticSearch 本篇我们将会介绍到一种特殊的类似数据库存储机制的搜索引擎工具--ES elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以 ...
- MySQL与Java常用数据类型的对应关系
一.字符串数据类型: MySQL类型名 大小 用途 对应Java类名 char 0-255 bytes 定长字符串 (姓名.性别.学号) String varchar 0-65535 bytes 变长 ...
- dark room - 2020 年苹果设计奖得主,一个足够强大的照片视频编辑器
2020年苹果设计奖得主 2015年App Store最佳应用 Darkroom 是一个高级照片和视频编辑器.它对业余摄影师来说很容易操作,但对专业摄影师来说足够强大. 下载 ➤ Darkroom 下 ...