【遙感圖像處理】批量提取高光譜影像每個波段

        在該專欄上一篇文章中,簡單介紹了一些高光譜圖像的一些知識。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)

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