使用 Arcpy 批处理光栅图像

Batch processing raster images with Arcpy

我正在尝试在 Python 中编写一个代码,它将 5 个按顺序列出的波段光栅图像堆叠在一个文件夹中,然后将堆叠的图像输出到一个新文件夹。我的第一直觉是使用复合带工具在 arcpy 中自动化某种 for 循环结构。

我需要以下方面的帮助:

  1. 我在开始使用 for 循环时遇到问题。关于如何解决这个问题有什么建议吗?

    import arcpy
    arcpy.env.workspace = ".\"
    outws = "Stacked_Images_Folder"
    
    for rasters in folder:
        band1 = 
        band2 = 
        band3 = 
        band4 = 
        band5 =
    
        arcpy.CompositeBands_management("band1.tif;band2.tif;band3.tif;
        band4.tif, band5.tif","stacked_img.tif")
    
  2. 我想弄清楚脚本如何知道在堆叠 5 个波段后移动到新图像。我是否需要在开始之前将图像分类到单独的文件夹中,或者是否有解决方法,例如代码知道在达到 5 个波段后移动到下一张图像?

如果您的栅格都在同一个文件夹中,则不需要 for 循环来执行此操作:

import arcpy
wd="Y:/" #have this as your directory where all rasters are located
arcpy.env.workspace = wd
raster_list=arcpy.ListRasters("", "tif")
arcpy.CompositeBands_management(raster_list,"stacked_img.tif") #will save output on the same folder specified above.

如果要保存到新的子目录:

import os
outws = wd+"Stacked_Images_Folder/"
os.makedirs(outws)
arcpy.CompositeBands_management(raster_list, outws + "stacked_img.tif")

现在,如果您要将多组光栅合并到具有共同起始文件名的同一文件夹中,例如 img1-b1、img1-b2 等,您可以使用以下简单的方法使整个过程正常进行实施:

import arcpy
image_names=["img" + str(s) for s in range(1,143)]
wd="Y:/" #have this as your directory where all rasters are located
arcpy.env.workspace = wd
for image_name in image_names:
    print image_name
    raster_list=arcpy.ListRasters(image_name+"-*", "tif")
    import os
    outws = wd+"Stacked_Images_Folder/"
    os.makedirs(outws)
    arcpy.CompositeBands_management(raster_list, outws + image_name+ "_stacked_img.tif")