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

2023-04-18 19:02:17 来源:博客园

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


(资料图片)

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

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

我们希望,对于同一年成像的遥感影像进行逐像元平均值的求取。例如,上图中具有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 arcpyfrom 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_pathtif_file_name=arcpy.ListRasters("*","tif")tif_file_year=tif_file_name[0][0:4]one_year_tif_list=[]sum_pic=0for 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)中运行代码。代码运行完毕后,我们看一下结果文件夹。可以看到,其中的图像已经是按照成像时间,分别完成平均值求取后的结果了。

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

标签:

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

2023-04-18

进了“海淀鸡娃群美国分群”,我真的大开眼界!-热点

2023-04-18

即时看!额度高信用卡申请有哪些 这几家通过率最高

2023-04-18

世界新消息丨亚运场馆助力 杭州大学生首次参加全国击剑比赛就入八强

2023-04-18

头条:港股基金频频"预警"!为何总"炒"不赢A股?原因找到了

2023-04-18

前沿热点:河南沁阳市崇义镇:聚焦软弱涣散症结 激发基层治理活力

2023-04-18

被控受贿937万,中储粮安徽分公司原副总经理胡群受审

2023-04-18

世界即时:勇士0-2格林很自信!小萨说一事实,库里该批,普尔低迷原因出炉

2023-04-18

外交部:美国维护网络安全是假,维护自身网络霸权是真

2023-04-18

《地平线:西之绝境》DLC新角色Seyka演员:感谢PS

2023-04-18

赢球策略?福克斯:球队的调整之一是不能让追梦成为勇士的组织者

2023-04-18

淄博烧烤店老板回应“员工超负荷工作停业休整三天”:不是钱的事,现在要“保命”-每日视点

2023-04-18

邵阳一地惊现!十分罕见!

2023-04-18

锥生零重生为纯血_锥生零

2023-04-18

环球速看:最新龙虎榜:机构买入卓然股份超1亿,知名游资买入柏诚股份

2023-04-18

恩比德:有些人觉得我只喜欢得分 但我可攻可传&用正确的方式打球

2023-04-18

环球热点评!港股异动 | 力盟科技(02405)盘中涨超5% 毛利率三连降后仍超80%

2023-04-18

aespa将于下月8日发行新迷你专辑《MY WORLD》,回归歌谣界

2023-04-18

俄雇佣兵将领罕见公开呼吁普京停火具体详细内容是什么_焦点观察

2023-04-18

如何制作牙签的结构

2023-04-18

老成昆铁路四川段开始大修 提升线路通行能力 焦点精选

2023-04-18

马斯克证实创建AI初创公司的报道,计划创造一个“最大限度地寻求真理的人工智能”|全球新视野

2023-04-18

最新资讯:西班牙司法公职人员群体开始无限期罢工活动

2023-04-18

天天速读:升至紧凑型/设计依然个性 精灵#3首发亮相

2023-04-18

新生儿护理知识总结_新生儿护理知识

2023-04-17

太平鸟: 第四届监事会第十次会议决议公告

2023-04-17

走进川江“第一村”⑧丨安备村:岷江源头,点“绿”成金

2023-04-17

环球小姐奥莉维亚·库尔普的时尚观,变的越来越性感,越来越美丽_天天实时

2023-04-17

厦金“小三通”客运航线复航百日  旅客量累计近4.5万人次

2023-04-17

环球关注:重庆长嘉汇半程马拉松开跑 中国电信重庆公司圆满完成网络保障任务

2023-04-17

Copyright ©  2015-2022 华中频道网版权所有  备案号:京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com