利用 envi_layer_stacking_doit 实现波段融合。可考虑用面向对象的编程方式去重新编码(暂时复制以前的代码)。
compile_opt idl2
envi, /restore_base_save_files
start_path = 'F:\Temporary\data\LC8 Results\ENVI_clip\temp\ROI\'
cd,start_path
out_path = 'F:\Temporary\data\LC8 Results\ENVI_clip\temp\ROI\'
Files = FILE_Search(start_path + 'L*roi.tif', count = Filecount)
print, files
If FileCount Eq 0 Then Begin
print, 'File not exist'
Return
Endif
test_file = FILE_Search(out_path + '*Layer_stacking*', count = test_count)
if test_count ne 0 then begin
file_delete, out_path +"Layer_stacking"
file_delete, out_path +"Layer_stacking.hdr"
endif
nb = Filecount
fid = lonarr(nb)
pos = lonarr(nb)
dims = lonarr(5,nb)
out_bname = strarr(nb) ;为输出的每个波段命名
For i = 0, Filecount - 1 do begin
A_Name = Files[i]
envi_open_file, A_Name, r_fid=a_fid
envi_file_query, a_fid, ns=a_ns, nl=a_nl, nb=a_nb, dims = a_dims,$
data_type = data_type
fid[i] = a_fid
pos[i] = 0 ;由于输入文件为单波段,故取值0
dims[0,i] = a_dims
pos_num = strpos(file_basename(A_Name),'.')
out_bname[i] = strmid(file_basename(A_Name),0, pos_num)
Endfor
out_proj = envi_get_projection(fid=a_fid, $
pixel_size=out_ps)
out_name = 'Layer_stacking'
out_dt = data_type
envi_doit, 'envi_layer_stacking_doit', fid=fid, pos=pos, dims=dims, $
out_dt=out_dt, out_name= out_path + out_name, interp=2, out_ps=out_ps, $
out_proj=out_proj, r_fid=r_fid, out_bname = out_bname
ENVI_FILE_MNG, id =a_fid,/remove
print, 'Done'