I wonder if we can have an access to source code of ENVI functions?
I need to export some images from ENVI to IDL, I can use the export-
varaible-to-idl function in ENVI but I want to know how I can do this
without using ENVI.
|
|
0
|
|
|
|
Reply
|
Hassan
|
11/21/2009 10:45:16 PM |
|
Hassan wrote:
> I wonder if we can have an access to source code of ENVI functions?
> I need to export some images from ENVI to IDL, I can use the export-
> varaible-to-idl function in ENVI but I want to know how I can do this
> without using ENVI.
No, ENVI is not open source.
Do you just want to be able to read some ENVI files in IDL? That is
fairly straight-forward; the data file is just a binary file which the
associated header file describes.
Mike
--
www.michaelgalloy.com
Research Mathematician
Tech-X Corporation
|
|
0
|
|
|
|
Reply
|
Michael
|
11/21/2009 11:23:31 PM
|
|
On 22 Nov., 00:23, Michael Galloy <mgal...@gmail.com> wrote:
> Hassan wrote:
> > I wonder if we can have an access to source code of ENVI functions?
> > I need to export some images from ENVI to IDL, I can use the export-
> > varaible-to-idl function in ENVI but I want to know how I can do this
> > without using ENVI.
>
> No, ENVI is not open source.
>
> Do you just want to be able to read some ENVI files in IDL? That is
> fairly straight-forward; the data file is just a binary file which the
> associated header file describes.
>
> Mike
> --www.michaelgalloy.com
> Research Mathematician
> Tech-X Corporation
You can also try to export your envi-data as geotiff which can be
imported to idl by read_tiff with the geotiff flag. Give it a try. If
this won't work for you, just think about what Michael said...
Regards
CR
|
|
0
|
|
|
|
Reply
|
chris
|
11/21/2009 11:26:55 PM
|
|
I used the following code to read an ENVI file into IDL:
imagesize=[488,290,62]
refImage = READ_BINARY(file, DATA_DIMS = imageSize)
DEVICE, DECOMPOSED = 0
LOADCT, 38
WINDOW, 0, XSIZE = imageSize[0], YSIZE = imageSize[1]
TV, refImage, 0
but the resulting display was strange. I don't know how to put an
image here since it's easier to explain. anyway, the resulting display
seems to show a superimposed of the features. for example if in the
original image there are 2 features which are a bit far from each
other but when I want to display it in the IDL those two features are
overlaid.
|
|
0
|
|
|
|
Reply
|
Hassan
|
11/22/2009 6:41:05 PM
|
|
I used the following code to display the image:
image=read_tiff(file)
imagesize=[62,488,290]
DEVICE, DECOMPOSED = 0
LOADCT, 38
WINDOW, 0, XSIZE = imageSize[1], YSIZE = imageSize[2]
TV, Image(0,*,*), 0
but there are two problems: first it's displayed upside-down and
second the way it shows the image is quite different with other
softwares like ENVI, it's more like the image is shown in 256-color
table or something like that.
|
|
0
|
|
|
|
Reply
|
Hassan
|
11/22/2009 9:35:07 PM
|
|
On Nov 23, 5:35=A0am, Hassan <hkhav...@gmail.com> wrote:
> I used the following code to display the image:
> image=3Dread_tiff(file)
> imagesize=3D[62,488,290]
> DEVICE, DECOMPOSED =3D 0
> LOADCT, 38
> WINDOW, 0, XSIZE =3D imageSize[1], YSIZE =3D imageSize[2]
> TV, Image(0,*,*), 0
>
> but there are two problems: first it's displayed upside-down and
> second the way it shows the image is quite different with other
> softwares like ENVI, it's more like the image is shown in 256-color
> table or something like that.
I found a function to read ENVI image and it work well.As follows:
pro read_envi_image, infile, img, xs, ys, type, offset, mapinfo
;
; Copyright (c) 2003,Institute of Photogrammetry and Remote Sensing, ;
(IPF),
; Technical University of Vienna. Unauthorised reproduction
prohibited.
;
;+
; NAME:
; read_envi_file
;
; PURPOSE:
; IDL program, which reads standard ENVI image files (*.img).
;
;
; CATEGORY:
; Input_Output
;
; CALLING SEQUENCE:
; read_envi_file, infile, img, xs, ys, type,offset
;
; INPUTS:
; infile - input file name
;
; OPTIONAL INPUTS:
; None
;
; KEYWORD PARAMETERS:
; None
;
; OUTPUTS:
; img - ENVI image file, 2D array
; xs - number of samples
; ys - number of lines
; type - image data type
; offset - headeroffset
; mapinfo - information on spatial resolution (spacing) and
coordinates
; of upper left corner (ulx, uly)
;
;
; OPTIONAL OUTPUTS:
; None
;
; COMMON BLOCKS:
; none
;
; SIDE EFFECTS:
;
; RESTRICTIONS:
; None
;
; PROCEDURE:
;
; EXAMPLE:
;
; REMARKS
; None
;
; MODIFICATION HISTORY:
; Written by: Carsten Pathe, cp@ipf.tuwien.ac.at
; Date: 25.08.2003
;
;-
image =3D infile
header =3D strsplit(infile,'.',/extract)
header =3D header(n_elements(header)-2)+'.hdr'
openr, unit, header, /get_lun
header_line =3D ''
while not eof(unit) do begin
readf, unit, header_line
tmp =3D strsplit(header_line(0), '=3D', /extract)
header_keyword =3D strsplit(tmp(0), ' ', /extract)
print, header_keyword
if header_keyword(0) eq 'samples' then xs =3D long(tmp(1))
if header_keyword(0) eq 'lines' then ys =3D long(tmp(1))
if header_keyword(0) eq 'header' then offset =3D long(tmp(1))
if header_keyword(0) eq 'data' then type =3D long(tmp(1))
if header_keyword(0) eq 'map' then begin
mapinfo_tmp=3Dstrsplit(tmp(1),'{',/extract)
mapinfo_tmp=3Dstrsplit(mapinfo_tmp(1),',',/extract)
mapinfo=3D{ulx:0.,uly:0.,spacing:0.}
mapinfo.ulx=3Dmapinfo_tmp(3)
mapinfo.uly=3Dmapinfo_tmp(4)
mapinfo.spacing=3Dmapinfo_tmp(5)
endif
endwhile
close,unit & free_lun, unit
print, xs, ys
if type eq 1 then img=3Dbytarr(xs, ys)
if type eq 2 then img=3Dintarr(xs, ys)
if type eq 4 then img=3Dfltarr(xs, ys)
if type eq 12 then img=3Duintarr(xs, ys)
openr, unit,image, /get_lun
point_lun, unit, offset
readu, unit, img
close, unit & free_lun, unit
end
|
|
0
|
|
|
|
Reply
|
Jiek
|
11/23/2009 12:18:14 AM
|
|
On Nov 22, 4:35=A0pm, Hassan <hkhav...@gmail.com> wrote:
> I used the following code to display the image:
> image=3Dread_tiff(file)
> imagesize=3D[62,488,290]
> DEVICE, DECOMPOSED =3D 0
> LOADCT, 38
> WINDOW, 0, XSIZE =3D imageSize[1], YSIZE =3D imageSize[2]
> TV, Image(0,*,*), 0
>
> but there are two problems: first it's displayed upside-down and
> second the way it shows the image is quite different with other
> softwares like ENVI, it's more like the image is shown in 256-color
> table or something like that.
The upside-down part I can help you with at least. With ENVI the
pixel origin is in the upper left corner of the image. With IDL the
origin is the lower left corner. So add a reverse and you should be
ok:
image =3D reverse(image,2)
put that aright after you call read_tiff.
As for how its displaying, i'm not sure i understand your description
of the problem, so i'll leave that to smarter folks than me :)
|
|
0
|
|
|
|
Reply
|
Jeff
|
11/23/2009 12:27:19 AM
|
|
Hassan wrote:
> but there are two problems: first it's displayed upside-down and
> second the way it shows the image is quite different with other
> softwares like ENVI, it's more like the image is shown in 256-color
> table or something like that.
The first can be fixed by using the /ORDER keyword to TV.
The second is how TV is supposed to work. Maybe the tvscale procedure
from http://www.dfanning.com/documents/programs.html can help (I do not
use it myself).
chl
|
|
0
|
|
|
|
Reply
|
Carsten
|
11/23/2009 11:27:00 AM
|
|
On Nov 23, 12:18=A0am, Jiek <676215...@qq.com> wrote:
> On Nov 23, 5:35=A0am, Hassan <hkhav...@gmail.com> wrote:
>
> > I used the following code to display the image:
> > image=3Dread_tiff(file)
> > imagesize=3D[62,488,290]
> > DEVICE, DECOMPOSED =3D 0
> > LOADCT, 38
> > WINDOW, 0, XSIZE =3D imageSize[1], YSIZE =3D imageSize[2]
> > TV, Image(0,*,*), 0
>
> > but there are two problems: first it's displayed upside-down and
> > second the way it shows the image is quite different with other
> > softwares like ENVI, it's more like the image is shown in 256-color
> > table or something like that.
>
> I found a function to read ENVI image and it work well.As follows:
> pro read_envi_image, infile, img, xs, ys, type, offset, mapinfo
>
> ;
> ; Copyright (c) 2003,Institute of Photogrammetry and Remote Sensing, ;
> (IPF),
> ; Technical University of Vienna. Unauthorised reproduction
> prohibited.
> ;
> ;+
> ; NAME:
> ; read_envi_file
> ;
> ; PURPOSE:
> ; IDL program, which reads standard ENVI image files (*.img).
> ;
> ;
> ; CATEGORY:
> ; Input_Output
> ;
> ; CALLING SEQUENCE:
> ; read_envi_file, infile, img, xs, ys, type,offset
> ;
> ; INPUTS:
> ; infile - input file name
> ;
> ; OPTIONAL INPUTS:
> ; None
> ;
> ; KEYWORD PARAMETERS:
> ; None
> ;
> ; OUTPUTS:
> ; img - ENVI image file, 2D array
> ; xs - number of samples
> ; ys - number of lines
> ; type - image data type
> ; offset - headeroffset
> ; mapinfo - information on spatial resolution (spacing) and
> coordinates
> ; of upper left corner (ulx, uly)
> ;
> ;
> ; OPTIONAL OUTPUTS:
> ; None
> ;
> ; COMMON BLOCKS:
> ; none
> ;
> ; SIDE EFFECTS:
> ;
> ; RESTRICTIONS:
> ; None
> ;
> ; PROCEDURE:
> ;
> ; EXAMPLE:
> ;
> ; REMARKS
> ; None
> ;
> ; MODIFICATION HISTORY:
> ; Written by: Carsten Pathe, c...@ipf.tuwien.ac.at
> ; Date: 25.08.2003
> ;
> ;-
>
> image =3D infile
>
> header =3D strsplit(infile,'.',/extract)
> header =3D header(n_elements(header)-2)+'.hdr'
>
> openr, unit, header, /get_lun
>
> header_line =3D ''
>
> while not eof(unit) do begin
>
> readf, unit, header_line
> tmp =3D strsplit(header_line(0), '=3D', /extract)
> header_keyword =3D strsplit(tmp(0), ' ', /extract)
>
> print, header_keyword
>
> if header_keyword(0) eq 'samples' then xs =3D long(tmp(1))
> if header_keyword(0) eq 'lines' then ys =3D long(tmp(1))
> if header_keyword(0) eq 'header' then offset =3D long(tmp(1))
> if header_keyword(0) eq 'data' then type =3D long(tmp(1))
>
> if header_keyword(0) eq 'map' then begin
>
> mapinfo_tmp=3Dstrsplit(tmp(1),'{',/extract)
> mapinfo_tmp=3Dstrsplit(mapinfo_tmp(1),',',/extract)
>
> mapinfo=3D{ulx:0.,uly:0.,spacing:0.}
> mapinfo.ulx=3Dmapinfo_tmp(3)
> mapinfo.uly=3Dmapinfo_tmp(4)
> mapinfo.spacing=3Dmapinfo_tmp(5)
>
> endif
>
> endwhile
>
> close,unit & free_lun, unit
> print, xs, ys
>
> if type eq 1 then img=3Dbytarr(xs, ys)
> if type eq 2 then img=3Dintarr(xs, ys)
> if type eq 4 then img=3Dfltarr(xs, ys)
> if type eq 12 then img=3Duintarr(xs, ys)
>
> openr, unit,image, /get_lun
> point_lun, unit, offset
> readu, unit, img
> close, unit & free_lun, unit
>
> end
I run it but it seems it imports just one band, right? is the output
variable named 'img'?
|
|
0
|
|
|
|
Reply
|
Hassan
|
11/23/2009 1:20:55 PM
|
|
Hassan wrote:
> I used the following code to read an ENVI file into IDL:
>
> refImage = READ_BINARY(file, DATA_DIMS = imageSize)
>
>[...]anyway, the resulting display
> seems to show a superimposed of the features.
Hi,
this is a typical data type problem.
By default, read_binary reads byte data. If you have floats or else,
this superimposition would occur (though I always witness it the other
way around, when saving a float declared as byte in IDL and opening the
image in Envi). See the DATA_TYPE keywork for read_binary
Jean
|
|
0
|
|
|
|
Reply
|
jeanh
|
11/23/2009 3:20:36 PM
|
|
Hassan wrote:
> On Nov 23, 12:18 am, Jiek <676215...@qq.com> wrote:
>> On Nov 23, 5:35 am, Hassan <hkhav...@gmail.com> wrote:
>>
>>> I used the following code to display the image:
>>> image=read_tiff(file)
>>> imagesize=[62,488,290]
>>> DEVICE, DECOMPOSED = 0
>>> LOADCT, 38
>>> WINDOW, 0, XSIZE = imageSize[1], YSIZE = imageSize[2]
>>> TV, Image(0,*,*), 0
>>> but there are two problems: first it's displayed upside-down and
>>> second the way it shows the image is quite different with other
>>> softwares like ENVI, it's more like the image is shown in 256-color
>>> table or something like that.
>> I found a function to read ENVI image and it work well.As follows:
>> pro read_envi_image, infile, img, xs, ys, type, offset, mapinfo
>>
>> ;
>> ; Copyright (c) 2003,Institute of Photogrammetry and Remote Sensing, ;
>> (IPF),
>> ; Technical University of Vienna. Unauthorised reproduction
>> prohibited.
>> ;
>> ;+
>> ; NAME:
>> ; read_envi_file
>> ;
>> ; PURPOSE:
>> ; IDL program, which reads standard ENVI image files (*.img).
>> ;
>> ;
>> ; CATEGORY:
>> ; Input_Output
>> ;
>> ; CALLING SEQUENCE:
>> ; read_envi_file, infile, img, xs, ys, type,offset
>> ;
>> ; INPUTS:
>> ; infile - input file name
>> ;
>> ; OPTIONAL INPUTS:
>> ; None
>> ;
>> ; KEYWORD PARAMETERS:
>> ; None
>> ;
>> ; OUTPUTS:
>> ; img - ENVI image file, 2D array
>> ; xs - number of samples
>> ; ys - number of lines
>> ; type - image data type
>> ; offset - headeroffset
>> ; mapinfo - information on spatial resolution (spacing) and
>> coordinates
>> ; of upper left corner (ulx, uly)
>> ;
>> ;
>> ; OPTIONAL OUTPUTS:
>> ; None
>> ;
>> ; COMMON BLOCKS:
>> ; none
>> ;
>> ; SIDE EFFECTS:
>> ;
>> ; RESTRICTIONS:
>> ; None
>> ;
>> ; PROCEDURE:
>> ;
>> ; EXAMPLE:
>> ;
>> ; REMARKS
>> ; None
>> ;
>> ; MODIFICATION HISTORY:
>> ; Written by: Carsten Pathe, c...@ipf.tuwien.ac.at
>> ; Date: 25.08.2003
>> ;
>> ;-
>>
>> image = infile
>>
>> header = strsplit(infile,'.',/extract)
>> header = header(n_elements(header)-2)+'.hdr'
>>
>> openr, unit, header, /get_lun
>>
>> header_line = ''
>>
>> while not eof(unit) do begin
>>
>> readf, unit, header_line
>> tmp = strsplit(header_line(0), '=', /extract)
>> header_keyword = strsplit(tmp(0), ' ', /extract)
>>
>> print, header_keyword
>>
>> if header_keyword(0) eq 'samples' then xs = long(tmp(1))
>> if header_keyword(0) eq 'lines' then ys = long(tmp(1))
>> if header_keyword(0) eq 'header' then offset = long(tmp(1))
>> if header_keyword(0) eq 'data' then type = long(tmp(1))
>>
>> if header_keyword(0) eq 'map' then begin
>>
>> mapinfo_tmp=strsplit(tmp(1),'{',/extract)
>> mapinfo_tmp=strsplit(mapinfo_tmp(1),',',/extract)
>>
>> mapinfo={ulx:0.,uly:0.,spacing:0.}
>> mapinfo.ulx=mapinfo_tmp(3)
>> mapinfo.uly=mapinfo_tmp(4)
>> mapinfo.spacing=mapinfo_tmp(5)
>>
>> endif
>>
>> endwhile
>>
>> close,unit & free_lun, unit
>> print, xs, ys
>>
>> if type eq 1 then img=bytarr(xs, ys)
>> if type eq 2 then img=intarr(xs, ys)
>> if type eq 4 then img=fltarr(xs, ys)
>> if type eq 12 then img=uintarr(xs, ys)
>>
>> openr, unit,image, /get_lun
>> point_lun, unit, offset
>> readu, unit, img
>> close, unit & free_lun, unit
>>
>> end
>
> I run it but it seems it imports just one band, right? is the output
> variable named 'img'?
This function is incomplete. You can customize it so it also reads the
number of bands... and the band data.
Also, if you read an Envi file, you may be interested in reading the
lookup table from the header (if any), so that you can display the data
with the exact same color in Envi and in IDL.
By the way, you say you want to do this in IDL, but you didn't specify
if you have to get rid of using Envi or not. If not, you can use the
following (note: again, the info read in the header is incomplete and
suits my need... feel free to read more info, such as the number of
bands AND the information on the band interleave..
;Open the file in envi
ENVI_OPEN_FILE, fileToOpen, /NO_REALIZE , R_FID=FID
;If it is a valid file, read the header
if (fid[0] eq -1) then return, -1
envi_file_query, fid, ns=dimX, nl=dimY, nb=nbBands, DATA_TYPE=dataType,$
OFFSET = HeaderOffSet, LOOKUP= lookup, class_names = classNames,$
num_classes = numClasses
map_Info = ENVI_GET_MAP_INFO(FID=FID)
;Pack the header info in a structure (optional)
headerInfo = {ns:dimX, nl:dimY, lookup:lookup, map_info:map_Info,$
class_names:classNames, num_classes:numClasses}
;Read the data in IDL
data = read_binary(fileToOpen,data_Start = HeaderOffSet,$
data_Type=dataType, data_Dims=[dimX,dimY],ENDIAN = "native")
Jean
|
|
0
|
|
|
|
Reply
|
jeanh
|
11/23/2009 3:29:08 PM
|
|
On Nov 23, 3:29=A0pm, jeanh
<jghasb...@DELETETHIS.environmentalmodelers.ANDTHIS.com> wrote:
> Hassan wrote:
> > On Nov 23, 12:18 am, Jiek <676215...@qq.com> wrote:
> >> On Nov 23, 5:35 am, Hassan <hkhav...@gmail.com> wrote:
>
> >>> I used the following code to display the image:
> >>> image=3Dread_tiff(file)
> >>> imagesize=3D[62,488,290]
> >>> DEVICE, DECOMPOSED =3D 0
> >>> LOADCT, 38
> >>> WINDOW, 0, XSIZE =3D imageSize[1], YSIZE =3D imageSize[2]
> >>> TV, Image(0,*,*), 0
> >>> but there are two problems: first it's displayed upside-down and
> >>> second the way it shows the image is quite different with other
> >>> softwares like ENVI, it's more like the image is shown in 256-color
> >>> table or something like that.
> >> I found a function to read ENVI image and it work well.As follows:
> >> pro read_envi_image, infile, img, xs, ys, type, offset, mapinfo
>
> >> ;
> >> ; Copyright (c) 2003,Institute of Photogrammetry and Remote Sensing, ;
> >> (IPF),
> >> ; Technical University of Vienna. Unauthorised reproduction
> >> prohibited.
> >> ;
> >> ;+
> >> ; NAME:
> >> ; read_envi_file
> >> ;
> >> ; PURPOSE:
> >> ; IDL program, which reads standard ENVI image files (*.img).
> >> ;
> >> ;
> >> ; CATEGORY:
> >> ; Input_Output
> >> ;
> >> ; CALLING SEQUENCE:
> >> ; read_envi_file, infile, img, xs, ys, type,offset
> >> ;
> >> ; INPUTS:
> >> ; infile - input file name
> >> ;
> >> ; OPTIONAL INPUTS:
> >> ; None
> >> ;
> >> ; KEYWORD PARAMETERS:
> >> ; None
> >> ;
> >> ; OUTPUTS:
> >> ; img - ENVI image file, 2D array
> >> ; xs - number of samples
> >> ; ys - number of lines
> >> ; type - image data type
> >> ; offset - headeroffset
> >> ; mapinfo - information on spatial resolution (spacing) and
> >> coordinates
> >> ; of upper left corner (ulx, uly)
> >> ;
> >> ;
> >> ; OPTIONAL OUTPUTS:
> >> ; None
> >> ;
> >> ; COMMON BLOCKS:
> >> ; none
> >> ;
> >> ; SIDE EFFECTS:
> >> ;
> >> ; RESTRICTIONS:
> >> ; None
> >> ;
> >> ; PROCEDURE:
> >> ;
> >> ; EXAMPLE:
> >> ;
> >> ; REMARKS
> >> ; None
> >> ;
> >> ; MODIFICATION HISTORY:
> >> ; Written by: Carsten Pathe, c...@ipf.tuwien.ac.at
> >> ; Date: 25.08.2003
> >> ;
> >> ;-
>
> >> image =3D infile
>
> >> header =3D strsplit(infile,'.',/extract)
> >> header =3D header(n_elements(header)-2)+'.hdr'
>
> >> openr, unit, header, /get_lun
>
> >> header_line =3D ''
>
> >> while not eof(unit) do begin
>
> >> readf, unit, header_line
> >> tmp =3D strsplit(header_line(0), '=3D', /extract)
> >> header_keyword =3D strsplit(tmp(0), ' ', /extract)
>
> >> print, header_keyword
>
> >> if header_keyword(0) eq 'samples' then xs =3D long(tmp(1))
> >> if header_keyword(0) eq 'lines' then ys =3D long(tmp(1))
> >> if header_keyword(0) eq 'header' then offset =3D long(tmp(1))
> >> if header_keyword(0) eq 'data' then type =3D long(tmp(1))
>
> >> if header_keyword(0) eq 'map' then begin
>
> >> mapinfo_tmp=3Dstrsplit(tmp(1),'{',/extract)
> >> mapinfo_tmp=3Dstrsplit(mapinfo_tmp(1),',',/extract)
>
> >> mapinfo=3D{ulx:0.,uly:0.,spacing:0.}
> >> mapinfo.ulx=3Dmapinfo_tmp(3)
> >> mapinfo.uly=3Dmapinfo_tmp(4)
> >> mapinfo.spacing=3Dmapinfo_tmp(5)
>
> >> endif
>
> >> endwhile
>
> >> close,unit & free_lun, unit
> >> print, xs, ys
>
> >> if type eq 1 then img=3Dbytarr(xs, ys)
> >> if type eq 2 then img=3Dintarr(xs, ys)
> >> if type eq 4 then img=3Dfltarr(xs, ys)
> >> if type eq 12 then img=3Duintarr(xs, ys)
>
> >> openr, unit,image, /get_lun
> >> point_lun, unit, offset
> >> readu, unit, img
> >> close, unit & free_lun, unit
>
> >> end
>
> > I run it but it seems it imports just one band, right? is the output
> > variable named 'img'?
>
> This function is incomplete. You can customize it so it also reads the
> number of bands... and the band data.
> Also, if you read an Envi file, you may be interested in reading the
> lookup table from the header (if any), so that you can display the data
> with the exact same color in Envi and in IDL.
>
> By the way, you say you want to do this in IDL, but you didn't specify
> if you have to get rid of using Envi or not. If not, you can use the
> following (note: again, the info read in the header is incomplete and
> suits my need... feel free to read more info, such as the number of
> bands AND the information on the band interleave..
>
> ;Open the file in envi
> ENVI_OPEN_FILE, fileToOpen, /NO_REALIZE , R_FID=3DFID
>
> ;If it is a valid file, read the header
> if (fid[0] eq -1) then return, -1
> envi_file_query, fid, ns=3DdimX, nl=3DdimY, nb=3DnbBands, DATA_TYPE=3Ddat=
aType,$
> =A0 =A0 OFFSET =3D HeaderOffSet, LOOKUP=3D lookup, class_names =3D classN=
ames,$
> =A0 =A0 num_classes =3D numClasses
> map_Info =3D ENVI_GET_MAP_INFO(FID=3DFID)
>
> ;Pack the header info in a structure (optional)
> headerInfo =3D {ns:dimX, nl:dimY, lookup:lookup, map_info:map_Info,$
> =A0 =A0 =A0 =A0 class_names:classNames, num_classes:numClasses}
>
> ;Read the data in IDL
> data =3D read_binary(fileToOpen,data_Start =3D HeaderOffSet,$
> =A0 =A0 =A0 =A0 data_Type=3DdataType, data_Dims=3D[dimX,dimY],ENDIAN =3D =
"native")
>
> Jean
thanks for that. but i still cant display the image as envi does,
there's no look up table in header file but i should be able to make
one.
|
|
0
|
|
|
|
Reply
|
Hassan
|
11/25/2009 11:40:09 AM
|
|
On Nov 23, 12:18=A0am, Jiek <676215...@qq.com> wrote:
> On Nov 23, 5:35=A0am, Hassan <hkhav...@gmail.com> wrote:
>
> > I used the following code to display the image:
> > image=3Dread_tiff(file)
> > imagesize=3D[62,488,290]
> > DEVICE, DECOMPOSED =3D 0
> > LOADCT, 38
> > WINDOW, 0, XSIZE =3D imageSize[1], YSIZE =3D imageSize[2]
> > TV, Image(0,*,*), 0
>
> > but there are two problems: first it's displayed upside-down and
> > second the way it shows the image is quite different with other
> > softwares like ENVI, it's more like the image is shown in 256-color
> > table or something like that.
>
> I found a function to read ENVI image and it work well.As follows:
> pro read_envi_image, infile, img, xs, ys, type, offset, mapinfo
>
> ;
> ; Copyright (c) 2003,Institute of Photogrammetry and Remote Sensing, ;
> (IPF),
> ; Technical University of Vienna. Unauthorised reproduction
> prohibited.
> ;
> ;+
> ; NAME:
> ; read_envi_file
> ;
> ; PURPOSE:
> ; IDL program, which reads standard ENVI image files (*.img).
> ;
> ;
> ; CATEGORY:
> ; Input_Output
> ;
> ; CALLING SEQUENCE:
> ; read_envi_file, infile, img, xs, ys, type,offset
> ;
> ; INPUTS:
> ; infile - input file name
> ;
> ; OPTIONAL INPUTS:
> ; None
> ;
> ; KEYWORD PARAMETERS:
> ; None
> ;
> ; OUTPUTS:
> ; img - ENVI image file, 2D array
> ; xs - number of samples
> ; ys - number of lines
> ; type - image data type
> ; offset - headeroffset
> ; mapinfo - information on spatial resolution (spacing) and
> coordinates
> ; of upper left corner (ulx, uly)
> ;
> ;
> ; OPTIONAL OUTPUTS:
> ; None
> ;
> ; COMMON BLOCKS:
> ; none
> ;
> ; SIDE EFFECTS:
> ;
> ; RESTRICTIONS:
> ; None
> ;
> ; PROCEDURE:
> ;
> ; EXAMPLE:
> ;
> ; REMARKS
> ; None
> ;
> ; MODIFICATION HISTORY:
> ; Written by: Carsten Pathe, c...@ipf.tuwien.ac.at
> ; Date: 25.08.2003
> ;
> ;-
>
> image =3D infile
>
> header =3D strsplit(infile,'.',/extract)
> header =3D header(n_elements(header)-2)+'.hdr'
>
> openr, unit, header, /get_lun
>
> header_line =3D ''
>
> while not eof(unit) do begin
>
> readf, unit, header_line
> tmp =3D strsplit(header_line(0), '=3D', /extract)
> header_keyword =3D strsplit(tmp(0), ' ', /extract)
>
> print, header_keyword
>
> if header_keyword(0) eq 'samples' then xs =3D long(tmp(1))
> if header_keyword(0) eq 'lines' then ys =3D long(tmp(1))
> if header_keyword(0) eq 'header' then offset =3D long(tmp(1))
> if header_keyword(0) eq 'data' then type =3D long(tmp(1))
>
> if header_keyword(0) eq 'map' then begin
>
> mapinfo_tmp=3Dstrsplit(tmp(1),'{',/extract)
> mapinfo_tmp=3Dstrsplit(mapinfo_tmp(1),',',/extract)
>
> mapinfo=3D{ulx:0.,uly:0.,spacing:0.}
> mapinfo.ulx=3Dmapinfo_tmp(3)
> mapinfo.uly=3Dmapinfo_tmp(4)
> mapinfo.spacing=3Dmapinfo_tmp(5)
>
> endif
>
> endwhile
>
> close,unit & free_lun, unit
> print, xs, ys
>
> if type eq 1 then img=3Dbytarr(xs, ys)
> if type eq 2 then img=3Dintarr(xs, ys)
> if type eq 4 then img=3Dfltarr(xs, ys)
> if type eq 12 then img=3Duintarr(xs, ys)
>
> openr, unit,image, /get_lun
> point_lun, unit, offset
> readu, unit, img
> close, unit & free_lun, unit
>
> end
it's really useful code, thanks for that. although after running the
code, it doesnt ask me for input file and it should be defined into
the code but it should be straightforward to do that.
|
|
0
|
|
|
|
Reply
|
Hassan
|
11/25/2009 11:55:04 AM
|
|
On Nov 23, 12:27=A0am, "Jeff N." <jeffnettles4...@gmail.com> wrote:
> On Nov 22, 4:35=A0pm, Hassan <hkhav...@gmail.com> wrote:
>
> > I used the following code to display the image:
> > image=3Dread_tiff(file)
> > imagesize=3D[62,488,290]
> > DEVICE, DECOMPOSED =3D 0
> > LOADCT, 38
> > WINDOW, 0, XSIZE =3D imageSize[1], YSIZE =3D imageSize[2]
> > TV, Image(0,*,*), 0
>
> > but there are two problems: first it's displayed upside-down and
> > second the way it shows the image is quite different with other
> > softwares like ENVI, it's more like the image is shown in 256-color
> > table or something like that.
>
> The upside-down part I can help you with at least. =A0With ENVI the
> pixel origin is in the upper left corner of the image. =A0With IDL the
> origin is the lower left corner. =A0So add a reverse and you should be
> ok:
>
> image =3D reverse(image,2)
>
> put that aright after you call read_tiff.
>
> As for how its displaying, i'm not sure i understand your description
> of the problem, so i'll leave that to smarter folks than me :)
i used reverse but it didnt work the upside-down problem.
|
|
0
|
|
|
|
Reply
|
Hassan
|
11/25/2009 12:02:47 PM
|
|
On Nov 23, 11:27=A0am, Carsten Lechte <c...@toppoint.de> wrote:
> Hassan wrote:
> > but there are two problems: first it's displayed upside-down and
> > second the way it shows the image is quite different with other
> > softwares like ENVI, it's more like the image is shown in 256-color
> > table or something like that.
>
> The first can be fixed by using the /ORDER keyword to TV.
>
> The second is how TV is supposed to work. Maybe the tvscale procedure
> fromhttp://www.dfanning.com/documents/programs.htmlcan help (I do not
> use it myself).
>
> chl
order works fine. thanks for that.
|
|
0
|
|
|
|
Reply
|
Hassan
|
11/25/2009 12:04:42 PM
|
|
> thanks for that. but i still cant display the image as envi does,
> there's no look up table in header file but i should be able to make
> one.
The lookup table is there when you have a classification file.
Otherwise, the data should be black and white (for 1 band). Are you
displaying 3 bands in Envi, each providing the RGB info?
Jean
|
|
0
|
|
|
|
Reply
|
jeanh
|
11/25/2009 1:24:13 PM
|
|
On Nov 25, 8:24=A0am, jeanh
<jghasb...@DELETETHIS.environmentalmodelers.ANDTHIS.com> wrote:
> =A0 > thanks for that. but i still cant display the image as envi does,
>
> > there's no look up table in header file but i should be able to make
> > one.
>
> The lookup table is there when you have a classification file.
> Otherwise, the data should be black and white (for 1 band). Are you
> displaying 3 bands in Envi, each providing the RGB info?
>
> Jean
Hi Jean,
Actually I'm displaying unclassified image that a lookup table should
be made for each pixel. it seems ENVI uses a default look-up table but
doesn't save it in the header file.
|
|
0
|
|
|
|
Reply
|
Hassan
|
12/8/2009 10:47:12 AM
|
|
|
16 Replies
570 Views
(page loaded in 0.285 seconds)
Similiar Articles: ENVI's codes - comp.lang.idl-pvwaveI wonder if we can have an access to source code of ENVI functions? I need to export some images from ENVI to IDL, I can use the export- varaible-to... Need help with map projection conversion in ENVI - comp.lang.idl ...ENVI's codes - comp.lang.idl-pvwave Need help with map projection conversion in ENVI - comp.lang.idl ... ENVI's codes - comp.lang.idl-pvwave | Computer Group Need help ... grouping medical procedure codes using ranges of codes - comp.soft ...ENVI's codes - comp.lang.idl-pvwave grouping medical procedure codes using ranges of codes - comp.soft ... Aside from the how to question, I'd suggest you look into BETOS ... Table Header not displayed - comp.lang.java.guiENVI's codes - comp.lang.idl-pvwave > thanks for that. but i still cant display the image as envi does, > there's no look up table in header file but i should be able to ... Batch ENVI Resize Data (Spatial/Spectral) - comp.lang.idl-pvwave ...Hy everybody, I'm trying to resize an ENVI image insinde a procedure. I know ... ENVI's codes - comp.lang.idl-pvwave Batch ENVI Resize Data (Spatial/Spectral) - comp.lang ... strange reverse path check - comp.dcom.sys.ciscoENVI's codes - comp.lang.idl-pvwave strange reverse path check - comp.dcom.sys.cisco ENVI's codes - comp.lang.idl-pvwave but the resulting display was strange. converting C/Visual BASIC code to MATLAB - comp.soft-sys.matlab ...It's not feasible in Matlab-alone code; but, as Walter says, it's relatively straightforward ... string temperature conversion - comp.soft-sys.matlab ENVI's codes - comp ... How to create a TIFF image from a binary raw data - comp.lang.java ...ENVI's codes - comp.lang.idl-pvwave I used the following code to display the image: image=read_tiff ... float declared as byte in IDL and opening the image in Envi). reading sar output on browser - comp.unix.solarisENVI's codes - comp.lang.idl-pvwave reading sar output on browser - comp.unix.solaris ENVI's codes - comp.lang.idl-pvwave; Input_Output ; ; CALLING SEQUENCE: ; read_envi ... How to float a DIV top right corner of browser? - comp.lang ...ENVI's codes - comp.lang.idl-pvwave... though I always witness it the other way around, when saving a float ... read_envi_file, infile, img, xs, ys, type ... bimodal histogram - comp.soft-sys.matlabENVI's codes - comp.lang.idl-pvwave Logarithmic Bins for Histogram - comp.soft-sys.matlab bimodal histogram - comp.soft-sys.matlab bimodal histogram - comp.soft-sys.matlab ... Query Show All records if parameter leaved blank - comp.databases ...ENVI's codes - comp.lang.idl-pvwave... to explain. anyway, the resulting display seems to show ... your description of the problem, so i'll leave that to ... Extracting data from sar - comp.unix.solarisENVI's codes - comp.lang.idl-pvwave That is fairly straight-forward; the data file is ... infile,'.',/extract ... reading sar output on browser - comp.unix.solaris ENVI's ... map set_union error: sequence not ordered - comp.lang.c++ ...ENVI's codes - comp.lang.idl-pvwave... CALLING SEQUENCE: > >> ; read_envi ... htmlcan help (I do not > use it myself). > > chl order works ... Algorithm; however i could ... string temperature conversion - comp.soft-sys.matlabENVI's codes - comp.lang.idl-pvwave Matlab code to C code converter - comp.soft-sys.matlab... Matlab code to C code converter - comp.soft-sys.matlab string temperature ... ENVI's codes - comp.lang.idl-pvwave | Computer GroupI wonder if we can have an access to source code of ENVI functions? I need to export some images from ENVI to IDL, I can use the export- varaible-to... envi coupon codes. Find and share coupons, discounts and promotion ...Find and share envi coupon codes and promo codes for great discounts at thousands of online stores. 7/21/2012 5:33:24 AM
|