-1

我有一个多光谱图像,我有一个问题。我在互联网上找到了一个可以读取这种图像的功能代码。问题是我收到以下错误:

??? function [lan_data] = lanread('montana.lan')
    |
Error: Function definitions are not
permitted in this context.

此外,当我检查“lanread”命令的帮助时,我收到了以下信息:“>> help landread

未找到土地读取。”

这个命令可能不存在吗?我没有找到太多关于它的信息。

提前致谢,

PD) 这是功能代码。

function [lan_data] = lanread('montana.lan','C:\formato_lan')
% LANREAD Read Landsat data file type .lan
% Ex: im = lanread('montana.lan')
% size(im) = [m,n,d];
    % (From landsatdemo in the image analysis toolbox.)

% $Id: lanread.m 3325 2007-04-06 15:52:34Z finn $

if (nargin<2), thepath = []; end
if isempty(thepath)
  [p,n,e]=fileparts(which('fms150path'));
  thepath= {fullfile('.',filesep),...
            fullfile(p,filesep,'data',filesep),...
            fullfile(p,filesep,'data',filesep,'protected',filesep),...
            fullfile(p,filesep,'data',filesep,'protected',filesep, ...
                     'lan',filesep),...
            ''};
elseif ischar(thepath)
  thepath = {thepath};
end

fid = -1;
if (fid<0)
  for path_idx=1:length(thepath)
    filename = sprintf('%s%s',thepath{path_idx},lan_filename);
    fid = fopen(filename,'r');
    if (fid>=0), break; end
  end
  if (fid<0) % If not found anywhere
    error(sprintf('Could not open file: %s',filename));
  end
end

% find out how big the image is based on file size,
% assuming square image, 7 bands
nbands = 7;
fseek(fid,0,'eof');
file_bytes = ftell(fid);
nlines = floor(sqrt(file_bytes/nbands));
nsamples = nlines;

% skip header
nbytes_header = 128;
fseek(fid,nbytes_header,'bof');

% prepend * to read data into an array that has the same class as the data
A = fread(fid,[nsamples nlines*nbands],'*uint8'); 

fclose(fid);

% put data into a 3D array
A_3dim = reshape(A,nsamples,nbands,nlines);
lan_data = permute(A_3dim,[3 1 2]);
4

1 回答 1

1
  1. 当调用一个函数(而不是定义一个函数)时,你不需要使用关键字function。所以,为了使用你刚才的功能

    [lan_data] = lanread('montana.lan');

  2. 声明函数时,必须使用关键字function但带有参数名称。所以文件中的第一行lanread.m应该是

    function [lan_data] = lanread(lan_filename, thepath)
    

    不是

    function [lan_data] = lanread('montana.lan','C:\formato_lan')
    

    只有当您调用函数时,您才使用 'montana.lan''c:\formato_lan' 作为参数。

  3. 要获得帮助,您需要准确输入函数名称

    文档 lanread

并不是landread

于 2013-02-07T09:15:52.140 回答