Пространственная подстановка изображений в пакетном режиме с использованием IDL и ENVI

Я хотел бы пространственно разместить фотографии LANDSAT в ENVI, используя программу IDL. У меня есть более 150 изображений, которые я бы хотел разместить на подмножестве, поэтому я хотел бы запустить программу в пакетном режиме (без взаимодействия). Я знаю, как сделать это вручную, но какую команду я бы использовал для пространственного подмножества изображения через координаты широты / долготы в коде IDL?

1 ответ

Вот немного вдохновения для одного файла. Вы можете сделать то же самое для большого количества файлов, создав список имен файлов и зацикливая его.

; 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'
Другие вопросы по тегам