what is wrong with my code?
Ältere Kommentare anzeigen
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 Kommentar
Jan
am 28 Feb. 2016
Please post the complete error message in your question, not a partial copy in the tags. Thanks.
Akzeptierte Antwort
Weitere Antworten (3)
yanjie qi
am 28 Feb. 2016
Bearbeitet: Walter Roberson
am 1 Mär. 2016
3 Kommentare
Jan
am 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
am 1 Mär. 2016
Bearbeitet: Walter Roberson
am 1 Mär. 2016
Walter Roberson
am 1 Mär. 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
am 1 Mär. 2016
0 Stimmen
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
am 1 Jan. 2018
0 Stimmen
I think this issue is because of using non-ASCII alphabets for naming a folder in which the data file is located.
1 Kommentar
Walter Roberson
am 1 Jan. 2018
No, the user did not pass the file name in to the function.
Kategorien
Mehr zu Call C++ from MATLAB finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!