Python ArcPy批量计算多时相遥感影像的各项元平均值

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

  在遥感应用中,我们经常需要对某一景遥感影像中的全部像元的像素值进行平均值求取——这一操作很好实现,基于ArcMap软件或者简单的Python代码就可以实现;但有时候,我们会需要结合同一地区、不同时相多景遥感影像,求取每一个像元全部时相中像素值的平均值——这一需求的实现较之前者就有些麻烦,本文对此加以介绍。

  首先,我们来明确一下本文的具体需求。现有一个存储有大量.tif格式遥感影像的文件夹,其中每一个遥感影像的文件名中都包含有该图像的成像时间,如下图所示。且其中除了.tif格式的遥感影像文件外,还具有其它格式的文件。

Python ArcPy批量计算多时相遥感影像的各项元平均值

  我们希望,对于同一年成像的遥感影像进行逐像元平均值的求取。例如,上图中具有2001年第185天成像、第193天成像、第201天成像……等等遥感影像8幅,每一幅都是这一年不同时间在同一空间位置的成像;同时,还有2005年不同时间成像的遥感影像9幅。我们希望,首先将2001年成像的8幅遥感影像加以逐像元平均值的求取,即求取每一个像元在这8景图像中像素值的平均;随后再对2005年成像的9幅遥感影像加以逐像元平均值的求取,以此类推。

  明确了需求后,我们就可以开始具体的操作。首先,本文所需用到的代码如下。

# -*- coding: utf-8 -*-
"""
Created on Sat Apr 16 10:48:37 2022

@author: fkxxgis
"""

import arcpy
from arcpy.sa import *

tif_file_path="E:/LST/Data/MODIS/05_Resample/"
average_file_path="E:/LST/Data/MODIS/06_Average/"
arcpy.env.workspace=tif_file_path

tif_file_name=arcpy.ListRasters("*","tif")
tif_file_year=tif_file_name[0][0:4]
one_year_tif_list=[]
sum_pic=0

for tif_file in tif_file_name:
    if tif_file[0:4]==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]:
            pic_num=len(one_year_tif_list)
            for tif_file_new in one_year_tif_list:
                sum_pic=sum_pic+Raster(tif_file_new)
            (sum_pic/pic_num).save(average_file_path+tif_file_year+"_Ave.tif")
    else:
        pic_num=len(one_year_tif_list)
        for tif_file_new in one_year_tif_list:
            sum_pic=sum_pic+Raster(tif_file_new)
        (sum_pic/pic_num).save(average_file_path+tif_file_year+"_Ave.tif")
        one_year_tif_list=[]
        sum_pic=0
        one_year_tif_list.append(tif_file)
        tif_file_year=tif_file[0:4]

  其中,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幅遥感影像。

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

  在这里,逐像元的平均值求取其实也非常简单——我们对每一个像元分别执行以下操作:首先将该像元在当前年份里所有遥感影像的像素值相加,随后除以这一年份的遥感影像的数量,得到的就是该像元在这一年中像素值的平均值

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

  在 IDLE (Python GUI) 中运行代码。代码运行完毕后,我们看一下结果文件夹。可以看到,其中的图像已经是按照成像时间,分别完成平均值求取后的结果了。

Python ArcPy批量计算多时相遥感影像的各项元平均值

  在最后,还需要说明一点——用以上代码来求取长时间序列遥感影像的像元平均值,对于任意一个像元,只要该像元在任意一个时相的图像中是无效值(即为NoData),那么该像元在最终求出的平均值结果图中,像素值也将会是无效值NoData。针对这一问题的解决,我们将在下一篇博客中介绍。

原文链接:https://www.cnblogs.com/fkxxgis/p/17330411.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python ArcPy批量计算多时相遥感影像的各项元平均值 - Python技术站

(0)
上一篇 2023年4月19日
下一篇 2023年4月19日

相关文章

  • win与linux系统中python requests 安装

    以下是关于在Windows和Linux系统中安装Python requests的详细攻略: 在Windows系统中安装Python requests 在Windows系统中安装Python requests非常简单。以下是安装Python requests的步骤: 安装Python 在安装Python requests之前,需要先安装Python。可以从Py…

    python 2023年5月14日
    00
  • Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)

    Python 模拟鼠标点击实现方法 什么是 Python 模拟鼠标点击? Python 模拟鼠标点击就是在 Python 编程环境下通过代码实现模拟鼠标的点击动作。 实现方式 Python 模拟鼠标点击可以通过以下方式实现: PyAutoGUI 库:这是一个 Python 自动化库,通过控制鼠标和键盘操作,可以模拟人类的行为,实现自动化测试等功能。 PyMo…

    python 2023年5月19日
    00
  • Python 添加文件注释和函数注释操作

    添加文件注释和函数注释是Python编程中非常重要的一项操作,能够为开发者提供更好的代码可读性和维护性。下面将提供完整的攻略,帮助你了解如何在Python中添加文件注释和函数注释。 Python添加文件注释操作 在Python文件的开头,使用三个双引号或单引号来添加多行注释。以下是添加文件注释的示例代码: """ 这是一个Pyt…

    python 2023年6月5日
    00
  • Python requests.post()方法中data和json参数的使用方法

    以下是关于Python requests.post()方法中data和json参数的使用方法的攻略: Python requests.post()方法中data和json参数的使用方法 在Python requests库中,使用post()方法提交数据时,可以使用data和json参数。以下是Python requests.post()方法中data和jso…

    python 2023年5月14日
    00
  • Python–模块(Module)和包(Package)详解

    下面是关于Python模块和包的完整攻略。 模块和包的概念 什么是模块(Module)? 在Python中,模块就是一个包含Python代码的文件。这些文件包含了变量、函数、类等Python代码,可以使用import语句导入到其他Python脚本中使用。 什么是包(Package)? 包是一个包含了多个模块的文件夹。包中的模块可以彼此之间调用,组合形成一个功…

    python 2023年5月13日
    00
  • Python如何快速上手? 快速掌握一门新语言的方法

    Python如何快速上手:快速掌握一门新语言的方法 学习Python的前置知识 在学习Python之前,有一些前置知识是必要的,如基础的编程概念和算法思想。如果你没有这些基础,建议先学习一下基础的编程知识,掌握C语言和数据结构、算法等基础课程。 Python学习资源 Python学习资源丰富,包括网络课程、电子书、官方文档和社区等。以下是一些学习Python…

    python 2023年5月19日
    00
  • python 自动刷新网页的两种方法

    对于“python 自动刷新网页的两种方法”的攻略,我来给你详细讲解一下。 Python自动刷新网页的两种方法 在Python中,我们可以使用两种方法来自动刷新网页。 方法一:使用selenium库 selenium库是专门用于模拟浏览器操作的Python库,它可以实现自动化测试、爬虫等多种用途。使用selenium库自动刷新网页的方法如下: 首先,需要安装…

    python 2023年5月19日
    00
  • BeautifulSoup中find和find_all的使用详解

    在本攻略中,我们将介绍BeautifulSoup中find和find_all的使用方法。以下是一个完整攻略,包括两个示例。 find和find_all的区别 在使用BeautifulSoup解析HTML页面时,我们经常需要查找特定的标签或标签组。find和find_all是两个常用的方法,用于查找标签或标签组。 find方法用于查找第一个符合条件的标签,而f…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部