| Re: trying to export pixel data from .dat files, based on coordinate loc [message #71699 is a reply to message #71616] |
Mon, 12 July 2010 14:12   |
Maxwell Peck
Messages: 61 Registered: February 2010
|
Member |
|
|
On Jul 13, 6:37 am, Snow53 <jennifer_wa...@hotmail.com> wrote:
> Thanks to all who gave great advice. I almost have this up and
> running, but have a few more questions.
>
> 1. At the moment, I have tested this code based on two files that each
> have their own .hdr. For the real thing, I want to create only
> one .hdr that can be used for all (200+) files since they have the
> same dims, data type, etc. How can I modify this code to look for that
> one .hdr file and use information from that file when looping through
> each file in the folder?
>
> 2. The ENVI Available Bands GUI pops up when I run this. Is this
> supposed to happen? I read that envi_open_file was non-interactive in
> idl (with batch mode).
>
> 3. The way the code currently reads, it will output twice when I run
> it but only giving me pixel data from the first file read under
> 'file'. I think that I need to write a loop to specify to read from
> the 'file' list one at a time, go through the code, close that file,
> and then start with the next. I'm not sure, though, how to write
> this, and would appreciate advice.
>
> 4. I did notice that I'm not getting back the correct sample/line
> pixel file locations from my input map locations (x,y). They seem to
> be one pixel off. Has anyone else had this happen?
>
> The code is shown below. Thanks again!
>
> Goal: Extract pixel data based on input coordinate location for each
> file (ENVI binary)
> ; within a specified folder location. Export this data to a .csv file.
>
> pro extractdata4
>
> ;define path
> cd, 'X:\MERRA\HDF_Output_Lena\test\'
>
> ;open envi files within given folder
> file_array=file_search('*.dat', count=num_file)
>
> for i=0, num_file-1 do begin
> file=file_array
> endfor
> print, num_file
> print, file
>
> ;read ENVI binary files
>
> envi_open_file , file, r_fid=fid
>
> ;convert x,y map coordinates to corresponding pixel coordinates. note
> that xmap and ymap can be single values or arrays if
> ;needed to extract info for multiple pixels.
> XMap=[109.55551335]
> YMap=[79.25]
>
> ENVI_CONVERT_FILE_COORDINATES, fid,XF, YF, XMap, YMap
>
> XF_out=Round(XF)
> YF_out=Round(YF)
> print, 'x pix' ,XF_out
> print, 'y pix', YF_out
>
> ;specify the data dims for the pixels who's info you want to extract.
> pos specifies which band(s) you want to extract from.
> ;for example, if I have 4 bands and I only want to extract from bands
> 1 and 4, pos would be [0,3]. Then extract for these pixels/bands.
> dims=[-1, XF_out, XF_out, YF_out, YF_out]
> pos=[0]
> pixdata = ENVI_GET_DATA(fid=fid, dims=dims, pos=pos)
>
> print, pixdata
> ;open text file to write data to
> OPENU, U, 'pixel_value.csv', /get_lun, /append
> ;write data
> printf, U, pixdata
> ;close LUN
> close, U
>
> end
1. It can be done just using IDL to read in the images but it will
probably be easier for you just to duplicate the header file and keep
them in ENVI format. (Unless you wanted to completely rewrite the
program)
2. You probably want ,/NO_REALISE in your envi_open_file.
3. Yes, use ENVI_FILE_MNG to close the file each time after the map
conversion.
4. Is it one pixel off or half a pixel off ?
Max
|
|
|
|