IDL—批量波段合成(只要点击运行,自动化处理,解放生产力)

  • Post author:
  • Post category:其他


参考博客地址:

https://blog.csdn.net/t46414704152abc/article/details/72520575

要进行几百份数据的波段合成,不批量处理真是要做到猴年马月哟。

参考上面的这个博文做了一些改动,遍历文件夹下所有地址,实现批量化处理,解放生产力,做个记录。

;这是一段进行遥感波段合成的代码
;img_dir代表需要合成的文件所在的目录
;orderArray是一个数组,代表读取到的文件的合成顺序
;imgSuffixName表示影像的后缀名
;outPutPath代表影像输出路径
Function LayerStack, img_dir,imgSuffixName,orderArray,outPutPath
  IF File_test(outPutPath) EQ 1 THEN BEGIN;如果输出路径文件已经存在,则直接返回
    return, outPutPath
  ENDIF
  COMPILE_OPT idl2
   ;求出该路径下对应格式的影像文件路径
   image_files=file_search(img_dir,"*."+imgSuffixName,count=fileNum)
  ;如果没找到文件,则返回
  if  image_files eq [""] then Begin
  print,"没找到",imgSuffixName,"类型的文件,请检查路径是否正确"
  return, outPutPath;若没找到对应文件,直接返回
  endif
  ;启动envi,打开第一个影像文件
  e = ENVI(/HEADLESS)
   band = e.OpenRaster(image_files[0])
   spatialRef = band.SPATIALREF;
   bandNum = Size(orderArray,/N_elements);求出波段合成顺序数组的大小
    bandArray = objarr(bandNum)
     ;按照orderArray中的顺序构造波段数组 
    For i = 0,bandNum-1 do begin;
      bandArray[i] = e.OpenRaster(image_files[orderArray[i]])
    Endfor
    ;开始执行波段合成操作
    Task = ENVITask("BuildBandStack")
    Task.SPATIAL_REFERENCE  = spatialRef
    Task.INPUT_RASTER = bandArray
    Task.OUTPUT_RASTER_URI = outPutPath
    Task.Execute; 
    return,outPutPath;返回输出路径
    END
    
;layerstak这个过程中调用上面定义的波段合成函数
PRO LayerStack
;获取该路径下的所有文件夹的路径,不包含文件
r = file_search('E:\DATA','*',count=num,/test_directory)
;imgPath='E:\LC08_L1GT_120038_20190828_20190903_01_T2'
FOR i=0,num-1 Do Begin
imgPath=r[i]
orderArray = [3,4,5,6];表示从索引3,4,5,6的顺序合成
outPutPath =imgPath+".tiff";表示合成结果输出路径
outPutPath = LayerStack(imgPath,"TIF",orderArray,outPutPath);调用波段合成函数
ENDFOR
END



版权声明:本文为lu_LLLR原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。