Code covered by the BSD License  

Highlights from
ENVI file reader/writer

4.5
4.5 | 7 ratings Rate this file 55 Downloads (last 30 days) File Size: 7.38 KB File ID: #27172 Version: 1.2

ENVI file reader/writer

by

 

05 Apr 2010 (Updated )

Mini-toolbox for reading and writing ENVI data and header files (including complex).

| Watch this File

File Information
Description

%test script

%clears workspace
clearvars;

%generate a complex 3-D variable
D=rand(2,3,4)+j*rand(2,3,4);

%create basic ENVI header info about a Matlab variable
info=enviinfo(D);

%write the variable and the associated header info in a pair of binary/header ENVI files
enviwrite(D,info,'a.dat'); %implicit header file is "a.dat.hdr" (if not explicitly passed)

%read a complex n-D variable from "a.dat" and "a.dat.hdr" ENVI files
[D2,info2]=enviread('a.dat');

%some comparisons to validate consistency of our read/write procedures
isequal(D,D2)
isequal(info,info2)

%modify the header info (introducing offset in ENVI header)
info3=info2;
info3.header_offset=10000;
D3=D2; %same as D2

%writing the D3 (same as D2), but with 10000 offset
enviwrite(D3,info3,'a3.dat');

%read the offset variable (D3)
[D3a,info3a]=enviread('a3.dat');

%comparisons to validate read/write
isequal(D3,D3a)
isequal(info3,info3a)

Acknowledgements

Envi To Matlab, Matlab To Envi, Envi File Reader, Updated 2/9/2010, and Read Envihdr inspired this file.

MATLAB release MATLAB 7 (R14)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (14)
08 Apr 2015 sadrime

The line66 problem in MATLAB R-2014b could also be removed by replacing it with:

line=textscan(line,'%s','Delimiter',',');

06 Mar 2015 Swadhin

Sorry, I was not able to explain fully.

Go to envihdrread.m

go to the problem line with the textscan error, in line 66.

Replace it with:

line = strsplit(line,',');

Then, remove the rest of the lines following it, until

info.map_info = [];
info.map....etc.

This has worked for me, as an alternative fix to the problem in MATLAB R-2014b

06 Mar 2015 Swadhin

FOR MATLAB 2014b, REPLACE THE FOLLOWING:

line=textscan(line,'%s',','); %behavior is not quite the same if "line" ends in ','

WITH:

line = strsplit(line,',')

AND THEN, IT SHOULD WORK. IT IS WORKING FOR ME, GOOD PIECE OF CODE!

04 Mar 2015 Umberto Minora

What is "string_to_cell"? Where did you find this function? It would be very useful to know since MATLAB doesn't seem to have it.

Comment only
28 Jan 2015 Benjamin Carlson

envihdrread.m, lines 66, 67, and 68 need to be replaced by:
line=string_to_cell(line, ',');

With this change, the program works great, thanks!
Ben Carlson, University of Oklahoma

26 Jan 2015 Rob Cranfill

This looks awesome, thanks! Except, as YongHyun wrote, it seems to error out under 2014b. I will attempt to hack it into submission, and if successful, will contribute the solution here, forthwith.

I am not even sure what the line of code "line=textscan(line,'%s',',');" is trying to do - that doesn't seem to be legal syntax, AFAICT.

25 Dec 2014 YongHyun

There are some errors on Ver. R2014b.

Error using textscan
Name-value pair arguments must come in pairs.

Error in envihdrread (line 66)
line=textscan(line,'%s',','); %behavior is not quite the same if "line" ends in ','

Error in enviread (line 20)
info=envihdrread(hdrfile);

Comment only
14 Aug 2014 Buwei

Buwei (view profile)

 
26 Jun 2013 Felix Totir

@James Wheeler: thank you for your contribution. Unfortunately, I am not able to test it, but please fork the code on the MatlabCentral. Or, if others confirm and youa gree, I will integrate it into the current code (with credit).

Comment only
25 Jun 2013 James Wheeler

I've written a few lines for envihdrread (at line 70) to allow for projections with whitespace in them (i.e. Geographic Lat/Lon). Apologies for clumsy script, I'm new to this...
if ischar(line{2})
line{2}=[line{1},' ',line{2}];
for n=1:numel(line)-1
line{n}=line{n+1};
end
line(numel(line))=[] ;
end

Comment only
22 Aug 2012 Benjamin

writeenvi.m produces error: Undefined function 'fix' for input arguments of type 'struct' in num2str using version 7.14(2012A).

Comment only
18 Jan 2012 Felix Totir

@Jaroslaw Tuszynski: The provided function envidataread.m is esentially a wrapper around multibandread(). Even a hint towards multibandread is given in the comments on lines 88 and 90 of that function (please have a look at the code).

However, using multibandread alone requires *reading the header by a human*. The purpose of this little toolbox is exactly to automatize that operation (working with headers and data).

Comment only
18 Jan 2012 Jaroslaw Tuszynski

A better option is to use MATLAB's multibandread function

Comment only
30 Nov 2010 Margaret

Very useful for importing ENVI standard files into Matlab as well as outputing the results from a Matlab analysis back to ENVI! Runs fast - no compatibility issues with large files.

Updates
26 Jul 2010 1.2

improved description

Contact us