最近用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