what is wrong with my code?
Afficher commentaires plus anciens
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 commentaire
Jan
le 28 Fév 2016
Please post the complete error message in your question, not a partial copy in the tags. Thanks.
Réponse acceptée
Plus de réponses (3)
yanjie qi
le 28 Fév 2016
Modifié(e) : Walter Roberson
le 1 Mar 2016
3 commentaires
Jan
le 28 Fév 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
le 1 Mar 2016
Modifié(e) : Walter Roberson
le 1 Mar 2016
Walter Roberson
le 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
le 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
le 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 commentaire
Walter Roberson
le 1 Jan 2018
No, the user did not pass the file name in to the function.
Catégories
En savoir plus sur Call C++ from MATLAB dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!