ENVI 二次开发 Landsat8数据融合(NNDifuse Pan Sharping)批处理

本程序使用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

你可能感兴趣的:(遥感)