what is wrong with my code?
Show older comments
function [lxw,XO,wl]= HSIFileOpen(lxwfilepath,HSIfilepath)
%HSIFileOpen函数用来打开高光谱影像数据
fp1 = fopen(lxwfilepath,'r');
fp2 = fopen(HSIfilepath,'r');
lxw=fread(fp1,'%f');
bands = lxw(1);%波段数
datatype = lxw(2);%字节数
samples = lxw(3);%列数
lines = lxw(4);%行数
columns = samples*lines;%像元个数
switch lxw(5)%数据格式
case 0
interleave = 'bsq';
case 1
interleave = 'bil';
case 2
interleave = 'bip';
case 3
interleave = 'mat';
end
%读取高光谱数据二进制文件
switch datatype
case 1
precision = 'uint8';
case 2
precision = 'uint16';
case 4
precision = 'float32';
end
if interleave == 'bsq'
XO = fread(fp2,[columns,bands],precision);
XO = XO';
elseif interleave == 'bil'
tmp = fread(fp2,[samples,bands*lines],precision);
XO = zeros(bands,columns);
for i=1:bands
for j=1:lines
XO(i,((j-1)*samples+1):j*samples) = tmp(:,(j-1)*bands+i);
end
end
elseif interleave == 'bip'
XO = fread(fp2,[bands,columns],precision);
elseif interleave == 'mat'
XO = fread(fp2,[bands,columns],precision);
end
b = lxw(6);%该参数判断有没有波长数据
if b==1
token = strtok(HSIfilepath,'.');
wavelengthpath = strcat(token,'.wl');
fp3 = fopen(wavelengthpath,'r');
wl=fscanf(fp3,'%f');
%关闭文件
fclose(fp3);
else
wl = 0;
end
fclose(fp1);
fclose(fp2);
[EDITED, Jan, copied from tags:]
but the error is
input argument "lxwfilepath" is undefined.
error in ==> hsifileopen at 6 fp1 = fopen(lxwfilepath">
1 Comment
Jan
on 28 Feb 2016
Please post the complete error message in your question, not a partial copy in the tags. Thanks.
Accepted Answer
More Answers (3)
yanjie qi
on 28 Feb 2016
Edited: Walter Roberson
on 1 Mar 2016
3 Comments
Jan
on 28 Feb 2016
Please read the documentation of a command, if it fails:
doc fread
'%f' is a format specifier for fscanf. According to the following lines, I assume you want something like this:
lxw = fread(fp1, 4, 'int16');
yanjie qi
on 1 Mar 2016
Edited: Walter Roberson
on 1 Mar 2016
Walter Roberson
on 1 Mar 2016
That code does not protect against the possibility of unexpected content in the data file. That code only defines the variable named interleave if a particular location in the file contains 0, 1, 2, or 3. At the very least the code should have an "otherwise" on the switch statement that generates an error saying that the file is not in the expected format.
Walter Roberson
on 1 Mar 2016
0 votes
You should be considering using http://www.mathworks.com/matlabcentral/fileexchange/29344-read-medical-data-3d from the File Exchange, as it reads .raw files with .hdr . It is tested code.
Mehdi Mosafer
on 1 Jan 2018
0 votes
I think this issue is because of using non-ASCII alphabets for naming a folder in which the data file is located.
1 Comment
Walter Roberson
on 1 Jan 2018
No, the user did not pass the file name in to the function.
Categories
Find more on Call C++ from MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!