| Re: subset an image by roi in idl [message #50481 is a reply to message #50307] |
Thu, 28 September 2006 23:32  |
gis_learner
Messages: 7 Registered: September 2006
|
Junior Member |
|
|
Dear All,
Below is the code that was provided by Pete. It subsets the image based
on a EVF vector file.
I really appreciate his help and time taking to give support. Thank you
Peter.
Hoping this also helps someone.
Best Regards
pro SUBSET_by_EVF
envi, /restore_base_save_files
envi_batch_init,log_file='batch.txt'
; define the image to be opened
img_file='C:\RSI\IDL61\products\ENVI41\data\bhtmref.img'
envi_open_file,img_file,r_fid=fid
print, 'fid=',fid
; query the file and define the output file variables
envi_file_query,fid,dims=dims,ns=ns,nl=nl,nb=nb
t_fid=lonarr(nb)+fid
pos=lindgen(nb)
out_name='subset.img'
;open the EVF file
evf_fname='C:\RSI\IDL61\subset_via_roi\bhtmref.evf'
evf_id=envi_evf_open(evf_fname)
;get the vector information
envi_evf_info,evf_id,num_recs=num_recs,data_type=data_type,p rojection=projection,$
layer_name=layer_name
; print information about each record
print, 'Number of records:',num_recs
for i=0,num_recs-1 do begin
record=envi_evf_read_record(evf_id,i)
print, 'Number of nodes in Record '+strtrim(i+1,2)+':
',n_elements(record[0,*])
print, 'Record Info:'
print, record
endfor
; Get record info (assuming one record in EVF)
record=envi_evf_read_record(evf_id,0)
xMap=record[0,*]
yMap=record[1,*]
;Convert record to xy pixel coordinates of the image to be subsetted
envi_convert_file_coordinates,fid,xf,yf,xMap,yMap
;Prepare the subset dimensions
dims[0]=-1L
dims[1]=min(xf)-1
dims[2]=max(xf)-1
dims[3]=min(yf)-1
dims[4]=max(yf)-1
;Use copyfile_doit to copy input file with new dimensions
envi_doit,'cf_doit',fid=t_fid,pos=pos,dims=dims,remove=0,out _name=out_name,r_fid=r_fid
; Exit Envi
envi_batch_exit
end
Pete yazdi:
> Jeff N.
> If I understand correctly from your comment..
>
> gis_learner wrote:
>> 3) as you said the roi's are as big as the original image. I tried to
>> define ROI from the subsetted images so that I can use in the original
>> ones.. But the result is terrible.....
>
> ROI's in ENVI are referenced by pixel coordinates (not geo-coordinates)
> so if you try to use roi boundarys (dims= ) on two images with
> different x y extents (nl= | ns= ) it will not work.
>
> If you like you can email me directly, and I'll give you a hand. We
> dont want to turn this group into >> idl-pvwave-ENVI-techsupport. ;)
>
> Pete
|
|
|
|