欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ArcGIS批量栅格影像归一化操作

程序员文章站 2022-07-16 19:02:23
...

  最近用ArcGIS做一个NDVI的时序分析,需要把原始影像的像素值(范围大概是在-3000 ~ 7000)转变至0~1之间,其实ArcToolBox中是有这个工具的,叫隶属模糊度,选择好影像,设置分类值函数为线性函数,这时候工具就会自动读取影像的最大最小值的了,如下图所示。

ArcGIS批量栅格影像归一化操作

但是由于处理的影像很多,一个一个来做肯定是不现实的。而且由于每个影像的最大最小值不同,批处理操作也是比较麻烦的,这个时候只有ArcPy脚本能救急了,参考了一下现有的代码,略作修改,完美解决问题,下面直接上代码。

import arcpy
from arcpy import env
from arcpy.sa import *
arcpy.CheckOutExtension("Spatial")
 
#这个是工作空间目录,待处理的所有影像都在这个文件型数据库中
env.workspace = "E:/poet/clip/clip.gdb"    

#设置读取的栅格类型,可以参考ArcGIS的官方文档,下面的是读取目录下所有类型的栅格文件
rasterList = arcpy.ListRasters("*") 
 
#结果输出文件夹
output_path = "E:/poet/toOne/" 

for raster in rasterList:
    print raster
    
    inRaster = raster

    maxValueDS = arcpy.GetRasterProperties_management(inRaster, "MAXIMUM")
    maxValue = maxValueDS.getOutput(0)
    print "最大值:" + str(maxValue)

    minValueDS = arcpy.GetRasterProperties_management(inRaster, "MINIMUM")
    minValue = minValueDS.getOutput(0)
    print "最小值:" + str(minValue)

    NormalizationRaster = (Raster(inRaster) - float(minValue)) / (float(maxValue)- float(minValue))
    #如果输入为文件型影像或者输出到数据库里这里不需要加后缀名
    out = output_path + inRaster + '.tif' 
    NormalizationRaster.save(out)
    print 'finish: ' + out