0

IDL プログラムを使用して、ENVI で LANDSAT 写真を空間的にサブセット化したいと考えています。サブセット化したい画像が 150 枚以上あるので、プログラムをバッチ モードで (対話なしで) 実行したいと考えています。手動で行う方法は知っていますが、IDL コードで緯度/経度座標を介して画像を空間的にサブセット化するには、どのコマンドを使用すればよいでしょうか?

4

1 に答える 1

2

単一のファイルの場合、ここにいくつかのインスピレーションがあります。ファイル名のリストを作成してループすることにより、多数のファイルに対して同じことを行うことができます。

; define the image to be opened (could be in a loop), I believe it can also be a tif, img...
img_file='path/to/image.hdr'
envi_open_file,img_file,r_fid=fid
if (fid eq -1) then begin
    print, 'Error when opening file ',img_file
    return
  endif

; let's define some coordinates
XMap=[-70.0580916, -70.5006694]
YMap=[-32.6030694, -32.9797194]
; now convert coordinates into pixel position:
; the transformation function uses the image geographic information:
ENVI_CONVERT_FILE_COORDINATES, FID, XF, YF, XMap, YMap
; we must consider integer. Think twice here, maybe you need to floor() or ceil()
XF=ROUND(XF)
YF=ROUND(YF)

; read the image
envi_file_query, fid, DIMS=DIMS, NB=NB, NL=NL, NS=NS
pos  = lindgen(nb)
; and store it in an array
image=fltarr(NS, NL, NB)
; read each band sequentially
FOR i=0, NB-1 DO BEGIN
   image[*,*,i]= envi_get_data(fid=fid, dims=dims, pos=pos[i])
endfor

; simply crop the data with array-indexing function
imagen= image[XF[0]:XF[1],YF[0]:YF[1]]

nl2=YF[1]-YF[0]
ns2=XF[1]-XF[0]

; read mapinfo to save it in the final file
map_info=envi_get_map_info(fid=fid)

envi_write_envi_file, imagen, data_type=4, $
  descrip = 'cropped', $
  map_info = map_info, $
  nl=nl2, ns=ns2, nb=nb, r_fid=r_fid, $
  OUT_NAME = 'path/to/cropped.hdr'
于 2012-09-30T09:21:00.600 に答える