ArcGIS批量栅格影像归一化操作
程序员文章站
2022-07-16 19:02:23
...
最近用ArcGIS做一个NDVI的时序分析,需要把原始影像的像素值(范围大概是在-3000 ~ 7000)转变至0~1之间,其实ArcToolBox中是有这个工具的,叫隶属模糊度,选择好影像,设置分类值函数为线性函数,这时候工具就会自动读取影像的最大最小值的了,如下图所示。
但是由于处理的影像很多,一个一个来做肯定是不现实的。而且由于每个影像的最大最小值不同,批处理操作也是比较麻烦的,这个时候只有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
上一篇: c#实现简易计算器
下一篇: 简易计算器 (C语言)作业