首页 > 其他分享 >ArcPy填补大量栅格图像的NoData

ArcPy填补大量栅格图像的NoData

时间:2023-09-18 22:01:45浏览次数:41  
标签:填充 无效 栅格 file 图像 path tif NoData ArcPy

  本文介绍基于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()函数中设定的参考区域的范围更大一些;当然,这样也会稍微降低填充值的精度,大家结合实际需要来操作即可。

标签:填充,无效,栅格,file,图像,path,tif,NoData,ArcPy
From: https://blog.51cto.com/fkxxgis/7516646

相关文章

  • ArcPy基于Excel采样点长时间数据执行IDW插值与自动掩膜
      本文介绍基于Python中ArcPy模块,实现Excel数据读取并生成矢量图层,同时进行IDW插值与批量掩膜的方法。1任务需求  首先,我们来明确一下本文所需实现的需求。  现有一个记录有北京市部分PM2.5浓度监测站点在2019年05月18日00时至23时(其中不含19时)等23个逐小时PM2.5浓度数据......
  • ARVGIS中创建NetCDF栅格图层无法自动读取变量的解决方法(包括netCDF4包查看nc文件属性)
    下载了.nc后缀的文件,准备通过Arcgis转为tif栅格形式,但是出现了如下问题:1.将nc文件拖入到输入栏后并不会自动提取变量、X维度、Y维度和输出栅格图层。 在尝试解决的过程中,使用python的netCDF4包查看nc文件属性,准备手动填写importnumpyasnpimportpandasaspdimportnet......
  • ArcPy用矢量数据的空间范围裁剪多张遥感影像
      本文介绍基于Python中ArcPy模块,基于矢量数据范围,对大量栅格遥感影像加以批量裁剪掩膜的方法。  首先,话不多说,本文所需要的代码如下所示。#-*-coding:utf-8-*-"""CreatedonTueDec1320:07:482022@author:fkxxgis"""importarcpyfromarcpy.saimport*t......
  • 【Python&RS】基于GDAL修改栅格数据的DN值
    ​    遥感工作者离不开栅格数据,有时候我们可能需要修改栅格数据的值,但ENVI和ArcGIS中并没有直接修改DN值的工具,只有栅格计算器、Bandmath这些工具去计算整个波段的值,或者EditClassificationImage工具可以修改ENVI分类后的像元值,但这个工具只对分类格式有效,博主整不......
  • 栅格地图: Bresenham's line
    参考:网易公开课,中国农业大学,Bresenham解释:对于【图2】中,当d≥1的时候,减去1,实际测试不对,应该分界点是0.5,超过0.5就要减去1.0【图3】中对于判断变量进行了改进,设置:e=d-0.5按照上述理解,整理出如下浮点运算和整数运算的代码,代码仅针对x0<x1,y0<y1,且dy/dx∈[0,1]1.浮......
  • GIS进行多个栅格属性组合绘图
    最近希望借鉴LCZ局地气候分区的方法进行空间耦合关系的制图,使单个像元内能够包括不同类型的属性信息,例如“人口密度高—GDP低—POI密度高”的形式。并且基础数据是栅格,记录一下操作过程。1.对栅格进行重分类这一步骤不再详细叙述,将栅格重分类为不同的等级(高中低)2.对多个栅格进......
  • 【路径规划】基于海鸥优化算法实现栅格地图机器人路径规划附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进。......
  • ArcMap栅格重采样:最邻近分配、众数算法、双线性插值、三次卷积插值
      本文介绍在ArcMap软件中,实现栅格图像重采样的具体操作,以及不同重采样方法的选择依据。  在文章ArcPy批量掩膜、重采样大量遥感影像中,我们介绍了基于Python中Arcpy模块对栅格图像加以批量重采样的方法;而在ArcMap软件中,我们可以实现不需要代码的栅格重采样操作;本文就对这一操......
  • Qt 一文带你了解qt的三种 渲染引擎,包括栅格引擎(Raster)、OpenGL 和本地绘图系统
    概述Qt提供了多种渲染引擎,包括栅格引擎(Raster)、OpenGL和本地绘图系统。选择哪种引擎主要取决于你的应用程序需求和你的硬件环境。栅格引擎(Raster):这是Qt的软件渲染引擎,它在CPU上执行所有的绘图操作。栅格引擎在所有平台上都提供了一致的视觉效果,但可能会比硬件加速的引......
  • 高效控制轨道——折叠栅格化特效开
    第一个是折叠按钮我们在发现层太多了,我们不想看到他我们把需要的层先锁定起来,然后选中没用的层然后点上面的总控开关要注意,这里的层没有消失,只是让我们折叠起来了当我们把导入的东西放大后,会出现像素点但是我们选中栅格化后就变得清晰,也就是第二个按钮后面的哪个就......