首页 > 编程语言 >Python批量填补遥感影像的无效值NoData

Python批量填补遥感影像的无效值NoData

时间:2023-06-01 11:45:33浏览次数:44  
标签:填充 Python 无效 遥感 file 图像 tif NoData

  本文介绍基于PythonArcPy模块,对大量栅格遥感影像文件批量进行无效值NoData值)填充的方法。

  在处理栅格图像文件时,我们经常会遇到图像中存在有无效值(即NoData值)的情况。如下图所示,这里有一个矢量面要素图层和该矢量图层范围对应的一景栅格图像;可以看到,由于该栅格图像存在无效值NoData,因此栅格图像是没有完全遮盖矢量图层的。

  在一些情况下,这些无效值可能会对我们的后续图像处理操作带来很多麻烦。那么,我们可以通过代码,对大量存在NoData值的栅格图像进行无效值填充。

  首先,我们来明确一下本文的具体需求。现有一个存储有多张.tif格式遥感影像的文件夹,且文件夹内除了.tif格式的遥感影像文件外,还具有其它格式的文件。

  其中,每一个.tif格式遥感影像都存在若干无效值像元;我们希望对每一张遥感影像进行NoData值的填充。

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

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 19 14:53:49 2022

@author: fkxxgis
"""

import arcpy
from arcpy.sa import *

tif_file_path="E:/LST/Data/MODIS/13_Average/"
fill_file_path="E:/LST/Data/MODIS/14_AverageFill/"
arcpy.env.workspace=tif_file_path

tif_file_name=arcpy.ListRasters("*","tif")
for tif_file in tif_file_name:
    fill_file=arcpy.sa.Con(IsNull(tif_file),
                           FocalStatistics(tif_file,NbrAnnulus(1,12,"CELL"),"MEAN"),
                           tif_file)
    fill_result_path=fill_file_path+tif_file.strip(".tif")+"_Fill.tif"
    fill_file.save(fill_result_path)

  其中,tif_file_path是原有填充无效值前遥感图像的保存路径,fill_file_path是我们新生成的填充无效值后遥感影像的保存路径,也就是结果保存路径。

  首先,我们利用arcpy.ListRasters()函数,获取路径下原有的全部.tif格式的图像文件;接下来,遍历tif_file_path路径下全部.tif格式图像文件,并分别执行arcpy.sa.Con()这个栅格计算函数。其中,该函数中IsNull(tif_file)表示首先选择每一景图像中的无效值像元,随后通过FocalStatistics()函数进行无效值的填充;NbrAnnulus(1,12,"CELL")参数表示,以当前无效值像元为圆心,12为圆环外半径,1为圆环内半径,构建一个圆环作为参考区域,从而以圆环内所有像元的值作为参考进行圆心处该无效值像元的填充(除了圆环,还可以设置矩形、扇形、圆形等);"MEAN"参数表示以刚刚这个圆环中全部像元数值的平均值作为圆心处该无效值像元的数值。最后,我们在原有遥感影像文件名后添加"_Fill.tif"后缀,作为填充后遥感影像文件的新文件名。

  在 IDLE (Python GUI) 中运行代码。代码运行完毕后,我们选取一景图像,对比填充前后的图像结果,如下图所示;其中,这一张是填充前图像。

  这一张则为填充后图像。

  通过对比,我们可以看到填充后图像中的空白区域(NoData值区域)已经明显较之填充前图像有了很大程度的减少(图像右下角尤为明显)。如果大家想让更多的NoData值区域得到填充,就可以将FocalStatistics()函数中设定的参考区域的范围更大一些;当然,这样也会稍微降低填充值的精度,大家结合实际需要来操作即可。

标签:填充,Python,无效,遥感,file,图像,tif,NoData
From: https://www.cnblogs.com/fkxxgis/p/17448488.html

相关文章

  • python目录扫描工具——dirsearch使用,可以使用御剑的字典 支持慢速扫描,一般使用-s 60
    使用御剑的字典:pythondirsearch.py-uxxx.com-e*-w/media/dir_dict/ASP.txt,/media/dir_dict/ASPX.txt,/media/dir_dict/DIR.txt,/media/dir_dict/JSP.txt,/media/dir_dict/MDB.txt,/media/dir_dict/PHP.txt 非常好用!!!如下是御剑的字典文件。 进入dirsearch目录,进行扫描在这......
  • json.dumps(),json.loads(),json.dump(),json.load()方法的区别(python)
    1.json.dumps()json.dump()是将字典类型转化成字符串类型。importjsondic={'a':'1111','b':'2222','c':'3333','d':'4444'}st=json.dumps(dic)print("我是字典类型的",dic)print("我是字......
  • Flask-----轻量级的框架,快速的搭建程序(python)
     Flask是一个基于Python开发并且依赖jinja2模板和WerkzeugWSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借......
  • Python装饰器
    Python装饰器是一种语法糖,用于修改函数或类的行为,而无需修改其源代码。装饰器是一个可以接受函数或类作为参数,并返回一个新函数或类的函数。它可以用于添加功能,比如缓存、日志、计时等,或者改变函数或类的行为,比如限制访问、检查参数、实现单例等。装饰器通常定义为一个函数,该函数......
  • python中的logger模块
    logger提供了应用程序可以直接使用的接口handler将(logger创建的)日志记录发送到合适的目的输出filter提供了细度设备来决定输出哪条日志记录formatter决定日志记录的最终输出格式logging模块介绍logger提供了应用程序可以直接使用的接口handler将(logger创建的)日志记录发送......
  • python读取配置文件
    配置文件作为一种可读性很好的格式,非常适用于存储程序中的配置数据。在每个配置文件中,配置数据会被分组(比如“config”和“cmd”)。每个分组在其中指定对应的各个变量值。如下:#定义config分组[config]platformName=AndroidappPackage=com.romweappActivity=com.romwe.Spl......
  • 【Python】redis 模块_Key-Value 数据库
    RedisRedis是一个开源的基于内存也可持久化的Key-Value数据库,采用ANSIC语言编写。它拥有丰富的数据结构,拥有事务功能,保证命令的原子性。由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快、实时通讯、缓存等。但内存数据库通常要考虑机器的......
  • Python特点
    1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。2.易于阅读:Python代码定义的更清晰。3.易于维护:Python的成功在于它的源代码是相当容易维护的。4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。......
  • python dig trace 功能实现——通过Querying name server IP来判定是否为dns tunnel
    dnstunnel确认方法,查询子域名最终的解析地址:使用方法:pythondig_trace.py "<7cf1e56b67fc90f8caaae86e0787e907>.nsconcreteblock.info"anySelectedrootnameserver: 192.203.230.10['.','info.','nsconcreteblock.info.','<......
  • python compileall 打包发布
    Python工程的编译、合并、打包、发布 确保要发布的包(demo)的根目录中有__main__.py文件,这个是程序执行入口。编译python3-O-mcompilealldemo批量改名.pyc文件find.-name'*.pyc'-execrename's/.cpython-35.opt-1//'{}\;移动.pyc文件find.-name'*.pyc'-execdirmv......