【问题标题】:Batch processing raster images with Arcpy使用 Arcpy 批量处理光栅图像
【发布时间】:2015-09-30 15:27:18
【问题描述】:

我正在尝试用 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 个波段后移动到下一张图像吗?

【问题讨论】:

  • 目前您的问题中没有足够的信息。 folder的结构是什么?在 for 循环中包含 arcpy.Composite.... 是否有原因?
  • 文件夹结构按顺序列出图像波段:img1-b1、img1-b2、img1-b3、img1-b4、img1-b5、img2-b1...复合带工具应该放在代码中,我只是假设它是循环的一部分,因为循环旨在将工具应用于每组 5 个带。

标签: python for-loop batch-processing raster arcpy


【解决方案1】:

如果您的栅格都在同一个文件夹中,则不需要 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")

【讨论】:

  • 这里有一个问题 - 我不想从所有这些波段创建单个光栅图像。我正在尝试创建 143 个 5 波段光栅图像(我的文件夹中有 715 个 5 波段图像)。
  • 对不起,但从最初的问题中并不清楚。我已更新代码以使其正常工作。
  • 感谢您的帮助,但我仍然在最后一行出现错误。错误读取“输入栅格:需要值”,以及参数无效的错误。
  • 检查 raster_list 向量中的内容,可能并非所有 imgx 都有栅格,因此 listraster 命令生成一个空向量。为避免此错误,请将最后一行放在 if 循环中,该循环仅在 raster_list 的长度>0 时运行。无论哪种情况,都无法调试您的次要问题,因为您的问题中没有可用信息。上面的代码已经过测试并且可以工作。其他问题可能超出了您提出的问题的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 2012-10-05
  • 2015-01-05
  • 1970-01-01
相关资源
最近更新 更多