【遥感图像处理】批量提取高光谱影像每个波段

        在该专栏上一篇文章中,简单介绍了一些高光谱图像的一些知识。HSI图像的最明显的一个特点就是光谱波段非常多,光谱信息极为丰富。但是有些波段在实际应用中并非是我们所需要的,那么怎么对HSI中的波段进行指定提取,选择我们所需的波段?

使用ENVI

  1. 首先使用打开原始HSI,选择【file】->【Save as】->【Save as…】
    在这里插入图片描述
  2. 选择【Spectral Subset…】后,在该窗体中会显示当前HSI影像中的所有波段。比如,我们需要Band1,选择【Band 1(410.7270)】后点击【ok】
    在这里插入图片描述
  3. 最后,选择输出影像目录和输出格式,这里我们选择了TIFF格式。
    在这里插入图片描述

使用脚本批量处理

        由于工作需要,这里我需要将HSI影像中的所有波段一一提取出来,这里我们使用了idl语言编写的脚本程序。
(工具下载链接:https://download.csdn.net/download/lucky51222/10892061)。
(注:下面2和3顺序调换一下,第一次编辑时没有发现这个错误,这里特此纠正)
在这里插入图片描述

将img格式转为tif格式

        使用该工具对所有波段的提取生成的文件格式为img,但是由于工作需要,必须要将img格式的影像转为tif格式。下面继续使用idl语言脚本进行转换。

PRO img_to_tif

  COMPILE_OPT idl2                             ;改变idl中默认设置
 
  ENVI, /RESTORE_BASE_SAVE_FILES               ;恢复ENVI Sav文件
 
 ENVI_BATCH_INIT                              ;开始批处理
 
  filePath = 'E:test'                        ;原始文件路径
 
  inputFiles = DIALOG_PICKFILE(title = '添加文件', filter = '*.img', $
 
    path = filePath, /fix_filter, /multiple_files)                   ;批量添加数据
    
  nFiles = N_ELEMENTS(inputFiles)                                    ;文件个数
 
  FOR i = 0L, nFiles-1 DO BEGIN                                      ;循环开始
 
   ENVI_OPEN_FILE, inputFiles[i], R_FID=fid, $
    
     /NO_INTERACTIVE_QUERY                                   ;打开文件
     
    IF fid EQ -1 THEN RETURN                                  ;判断是否打开文件
    
   ENVI_FILE_QUERY, fid, NB=nb, DIMS=dims, NL=nl, NS=ns, $   ;查询图像信息
    
     INTERLEAVE=interleave, DATA_TYPE=data_type
     
    fileName = FILE_BASENAME(inputFiles[i])                   ;获取文件名字
    
    outFileDir = FILE_DIRNAME(inputfiles[i], /MARK_DIRECTORY) ;文件输出路径
    
    pointPos = STRPOS(fileName, '.', /REVERSE_SEARCH)         ;倒序寻找文件名中.的位置
    
    IF pointPos[0] NE -1 THEN BEGIN
    
     fileName = STRMID(fileName, 0, pointPos)                ;获取文件名字
     
    ENDIF
    
    out_name = outFileDir + fileName+'_t.tif'
    
    bnames = 'band '+STRCOMPRESS(STRING(INDGEN(nb)+1), /REMOVE_ALL)   ;波段名字
    
   ENVI_SETUP_HEAD, FNAME = out_name, BNAMES = bnames, $
    
     FILE_TYPE = ENVI_FILE_TYPE('TIFF'), DATA_TYPE = data_type, $
     
     INTERLEAVE = interleave,NB = nb, NL = nl, NS = ns,/WRITE       ;创建头文件
     
   ENVI_OUTPUT_TO_EXTERNAL_FORMAT, OUT_NAME = out_name, $
    
     FID = fid,DIMS = dims, POS = INDGEN(nb), $
     
     OUT_BNAME = bnames, /TIFF                                      ;img转tif格式
     
  ENDFOR
 
  tmp = DIALOG_MESSAGE('img to tif 结束', /info)                       ;结束
 
END
  1. 将以上代码拷贝到idl编辑器中(若输出的文件有问题,点重置再运行)
    在这里插入图片描述
  2. 点击运行,此时会弹出选择文件窗口,这里选择需要转换的img格式影像(该脚本支持批量转换,可以一次选择多个img格式影像)
    在这里插入图片描述
  3. 点击ok,开始执行脚本,等待执行结束,会弹出转换完成的提醒。
    在这里插入图片描述

参考链接:
http://blog.sina.com.cn/s/blog_764b1e9d0100wnq3.html(批量将图像波段单独存为文件)
https://download.csdn.net/download/lucky51222/10892061(工具下载连接)
http://blog.sina.com.cn/s/blog_169df2d770102yhzg.html(img转tif)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章