本程序使用IDL语言实现基于ENVI的二次开发——Landsat8数据融合。模仿ENVI 5.x通过_MTL.txt文件打开Landsat 8数据,将30米的多光谱数据与15米的第8波段数据采用NNDifuse Pan Sharping方法进行融合。Landsat 8数据为2017年5月1日USGS改版后的数据。转载请标明出处。
;Landsat8 NNDifuse Pan Sharping
PRO landsat8_nndifusepansharping
COMPILE_OPT idl2
ENVI,/restore_base_save_files
ENVI_BATCH_INIT
; 启动ENVI5.x
e = ENVI(/headless)
input=DIALOG_PICKFILE(TITLE='选择Landsat文件夹',/DIRECTORY)
IF (input EQ '' ) THEN RETURN
datefiles=File_Search(input,'*_MTL.txt',/FOLD_CASE,COUNT=count)
IF (count EQ 0) THEN BEGIN
void=DIALOG_MESSAGE([input,'文件夹下无法找到DAT文件!'])
RETURN
ENDIF
Outputfolder=DIALOG_PICKFILE(TITLE='选择NNDifuse Pan Sharping结果保存文件夹',/DIRECTORY)
IF (Outputfolder EQ '') THEN RETURN
CD,Outputfolder
;创建文件夹
ResultFolder=FILE_BASENAME(input)
FILE_MKDIR,ResultFolder
CD,ResultFolder
;初始化进度条
ENVI_REPORT_INIT,'Batch Processing...',TITLE='NNDifuse Pan Sharping', base=base,/INTERRUPT
ENVI_REPORT_INC, base, count
;循环批量正射校正
FOR i = 0 ,(count-1) DO BEGIN
CD,Outputfolder+PATH_SEP()+ResultFolder
;取出文件名
basename=FILE_BASENAME(datefiles[i],'*_MTL.txt')
strmidname=STRMID(basename,0,2)+STRMID(basename,3,1)+STRMID(basename,9,17)+'15m.dat'
raster = e.OpenRaster(datefiles[i])
lowraster = raster[0]
highraster = raster[1]
Task = ENVITASK('NNDiffusePanSharpening')
Task.INPUT_LOW_RESOLUTION_RASTER = lowraster
Task.INPUT_HIGH_RESOLUTION_RASTER = highraster
Task.OUTPUT_RASTER_URI = strmidname
Task.EXECUTE,Error=error
;进度条
ENVI_REPORT_STAT,base,i,count1, CANCEL=cancelVar
;判断是否点击取消
IF cancelVar EQ 1 THEN BEGIN
tmp=DIALOG_MESSAGE('clip cancel'+STRING(i)+'%',/info)
ENVI_REPORT_INIT,base=base,/finish
BREAK
ENDIF
WAIT,0.1
ENDFOR
ENVI_REPORT_INIT,base=base,/finish
ENVI_BATCH_EXIT
END