1. 程式人生 > 其它 >IDL批量計算柵格資料平均值

IDL批量計算柵格資料平均值

技術標籤:遙感IDL遙感IDL柵格平均值

遙感資料處理系列

一些專案及科研中遇到的小需求,一方面記錄自己的學習歷程,另一方面幫助大家學習。

ArcPy批量計算柵格資料平均值
GLDAS資料下載及處理(NC轉TIF)
ArcGIS批量裁剪柵格資料
ArcPy批量柵格重取樣
ArcPy批量裁剪柵格資料

IDL多程序批處理遙感資料
ArcPy批量拼接柵格資料


文章目錄


前言

在使用ArcGIS的開發包函式進行柵格資料平均值計算時發現,在結果影像出現了好多的異常值?經過檢視發現是因為ArcGIS演算法的問題,所以,用IDL寫了下自己的柵格平均值計算邏輯。

一、柵格資料平均值

1. 原理簡介

使用ArcGIS進行柵格資料平均值計算時,出現異常值的原因如下圖所示:
ArcGIS計算柵格資料平均值原理
那麼問題來了:如果每個像元都有一個NoData出現過,那豈不是OutRas裡面全部都是NoData了?
我腦海裡的柵格資料平均值:對於N景影像,在(a,b)座標處有 t 景影像存在有效像元,那麼其平均值應該是多景影像在(a,b)座標處DN值的累加 除以 t

2. 程式碼

檔案組織架構:

inws MYD09.2011.001.tif MYD09.2011.002.tif ...
outs 輸出到

輸入:
一個含有若干柵格資料的資料夾 inws(本例為“.tif”格式)

程式碼例項:

pro Average_Batch

  ;計算輸入資料夾內的 所有柵格資料的 平均值
  ;算整個資料夾的

  compile_opt strictarr
  COMPILE_OPT idl2

  envi, /restore_base_save_files
  envi_batch_init, log_file='batch.txt',/NO_STATUS_WINDOW

  dir0='F:\LE-daily-LMB\2017'   ; 輸入路徑

  out_dir=
'F:\LMB\LE-year' ; 輸出路徑 files=file_search(dir0,'*.tif') ; 讀取檔案資訊。先獲取個行列數 ENVI_OPEN_FILE, files[0], r_fid=fid, /no_realize ENVI_FILE_QUERY, fid, nl=nl, ns=ns,dims=dims,nb=nb mapinfo=envi_get_map_info(fid=fid) file=ENVI_GET_DATA(fid=fid,dims=dims,pos=0) low_row=N_elements(file[0,*]);獲取行數 low_col=N_elements(file[*,0]);獲取列數 Sum = make_array(low_col,low_row,value=0.0);存有效像元的累加值 count = make_array(low_col,low_row,value=0.0);存有效像元的出現次數 Average = make_array(low_col,low_row,value=0.0);存平均值 ; 遍歷資料夾內的所有柵格資料 for i=0,n_elements(files)-1 do begin ENVI_OPEN_FILE, files[i], r_fid=fid, /no_realize ENVI_FILE_QUERY, fid, nl=nl, ns=ns,dims=dims,nb=nb file=ENVI_GET_DATA(fid=fid,dims=dims,pos=0) ; 單景影像的邏輯 for a=0,low_col-1 do begin;獲取列數 for b=0,low_row-1 do begin;獲取行數,應該是先列後行 if file[a,b] GT 0 then begin ;GE 大於等於運算子,左邊大於右邊則為真;GT 大於運算子;LE:小於等於運算子;LT:小於運算子 Sum[a,b] = Sum[a,b] + file[a,b] ; 有效值累加,每個像元的 count[a,b] = count[a,b] + 1 ;累加次數計數器 endif endfor endfor endfor Average = Sum / count outfile8 = out_dir + '\' + strmid(file_basename(files[0]),0,25) + '.Average.tif' ;16 25 ENVI_WRITE_ENVI_FILE , Average , r_fid=fid , map_info=mapinfo , out_name=outfile8 end

上例可實現對輸入路徑資料夾下的所有柵格資料的平均柵格計算。

總結

ArcPy牛皮!畢業萬歲!中期快樂!
批量計算平均柵格資料,接下來要繼續探索下IDL語言,雖然它的語法有些…,同時,學習下python + GDAL,這一大殺器