IDL之多波段运算(Map Variables to Multiband Images)

7 篇文章 0 订阅

    IDL波段运算,常规用法就是选择要运算的几个波段,经过运算后,输出为单波段结果。可我们经常也遇到这样的场景,如大气校正后,结果被放大10000倍,需要将每个波段都除以10000,再合成所有波段。ENVI中可以使用Map Variables to Multiband Images这个功能,可以选择几个波段或全部的文件作为运算波段,结果输出为对应多波段影像。

    ENVI中有两个函数,即math_doit、cf_doit将它们组合即可完成这样的功能,下面是IDL的Demo,测试数据是GF2大气校正后的影像,有4个波段,功能就是将每个波段除以10000,在合成输出为tif文件。大家可以根据自己的业务需要更改计算表达式。

 pro bandmath
   COMPILE_OPT idl2
   envi,/restore_base_save_files
   envi_batch_init
   imgFile='D:\Temp1\GF2\daqi\Flaashac'
   outPath='D:\Temp1\GF2\BandMath\result.tif'
   ENVI_OPEN_FILE,imgFile,r_fid = input_fid
   ;文件信息
   ENVI_FILE_QUERY,input_fid, nb = num_bands ,dims = dims,bnames= bnames
   pos_t = indgen(num_bands)
   out_fid=INTARR(num_bands)
   ;波段运算表达式
   ;对每个波段进行运算,结果存放于内存中
   expression ='float(b1)/10000'
   ;各个波段进行波段运算
   FOR i=0,num_bands-1 DO BEGIN
     ENVI_DOIT, 'math_doit', dims=dims, exp= expression, pos=pos_t[i], $
       fid=input_fid, r_fid=r_fid,/IN_MEMORY
     out_fid[i]=r_fid
   ENDFOR
   pos_dt = INTARR(num_bands)
   o_bname = bnames+"("+expression+")"
   ;合成波段
   ENVI_DOIT, 'cf_doit', dims=dims, fid=out_fid,/IN_MEMORY,out_bname = o_bname,$
     out_dt=4,OUT_NAME=outPath,pos=pos_dt,/REMOVE,r_fid=result_fid
   ;输出为tif格式
   ENVI_OUTPUT_TO_EXTERNAL_FORMAT,dims=dims,fid=result_fid,$
     OUT_BNAME=o_bname,out_name=outPath,pos=pos_t,/TIFF     
   envi_file_mng,id=input_fid,/REMOVE  
   ENVI_BATCH_EXIT
 end

 

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值