what is wrong with my code?
Mostra commenti meno recenti
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 Commento
Jan
il 28 Feb 2016
Please post the complete error message in your question, not a partial copy in the tags. Thanks.
Risposta accettata
Più risposte (3)
yanjie qi
il 28 Feb 2016
Modificato: Walter Roberson
il 1 Mar 2016
3 Commenti
Jan
il 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
il 1 Mar 2016
Modificato: Walter Roberson
il 1 Mar 2016
Walter Roberson
il 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
il 1 Mar 2016
0 voti
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
il 1 Gen 2018
0 voti
I think this issue is because of using non-ASCII alphabets for naming a folder in which the data file is located.
1 Commento
Walter Roberson
il 1 Gen 2018
No, the user did not pass the file name in to the function.
Categorie
Scopri di più su Call C++ from MATLAB in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!