IDL8.5进行波段合成代码

在很多次自己手动进行波段合成和裁剪工作之后,终于决定写代码来批量进行处理,节省工作量了。
利用IDL进行批量波段合成代码如下:

IDL语言中英文分号为注释符

;该函数进行波段合成
;img_dir代表需要合成的文件所在的目录
;orderArray是一个数组,代表读取到的文件的合成顺序
;imgSuffixName表示影像的后缀名
;outPutPath代表影像输出路径
FUNCTION MyLayerStack, 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; 
  print,"波段合成结束"
  return,outPutPath;返回输出路径
END

;layerstak这个过程中调用上面定义的波段合成函数
PRO layerstack
 ;注意文件路径最后一个斜杠“\”必须加上,否则搜索不到;
 imgPath = "I:\HJ数据\2011年\HJ1A-20110313\";
 orderArray = [0,1,2,3];表示从索引0,1,2,3的顺序合成
 outPutPath1 = imgPath+"波段合成.tiff";表示合成结果输出路径
 outPutPath1 = MyLayerStack(imgPath,"TIF",orderArray,outPutpath1);调用波段合成函数
END

将上述代码另存为layerstack.pro文件 注(文件名称layerstack和这个文件中的过程名称layerstack必须相同)在IDL中打开进行执行,即可进行波段的合成。

以上代码在IDL8.5环境中测试通过,希望能帮助到大家。如果想批量操作,直接把需要的文件目录放在一个数组中进行循环即可。

  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 31
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值