输入参数undefined - MATLAB函数/子函数

时间:2011-04-17 05:54:11

标签: matlab

我正在测试我在MATLAB中工作的函数的一部分。我已经定义了一个函数和子函数如下(仅用于测试):

function funct
clear all;
clc;
I = rand(11,11);
ld = input('Enter the lag = ') % prompt for lag distance
A = nlfilter(I, [7 7], @dirvar);

% Subfunction
function [h] = dirvar(I, ld) %tried with function [h] = dirvar(I) as well, 
                             %but resulted in same error
c = (size(I)+1)/2
EW = I(c(1),c(2):end)
h = length(EW) - ld

当我在命令窗口中以funct运行该函数时,出现以下错误:

Enter the lag = 1

ld =

     1


c =

     4     4


EW =

    0.0700    0.4073    0.9869    0.5470

??? Input argument "ld" is undefined.

Error in ==> funct>dirvar at 14
h = length(EW) - ld
Error in ==> nlfilter at 61
b = mkconstarray(class(feval(fun,aa(1+rows,1+cols),params{:})), 0, size(a));

Error in ==> funct at 6
A = nlfilter(I, [7 7], @dirvar);

ld被明确定义时,我无法弄清楚错误的内容和位置在哪里?

2 个答案:

答案 0 :(得分:1)

Chethan是正确的,因为nlfilter()只需要一个参数 - 所以你需要另一种方法来为dirvar()函数提供ld参数。

一种选择是将dirvar函数定义为调用函数内的嵌套函数。即,

function funct
% ...
ld = input('Enter the lag = ') % prompt for lag distance
A = nlfilter(I, [7 7], @dirvar);

% Subfunction
    function [h] = dirvar(I)
        c = (size(I)+1)/2
        EW = I(c(1),c(2):end)
        h = length(EW) - ld
    end

end

答案 1 :(得分:0)

我没有图像处理工具箱,所以我自己无法检查,但看起来nlfilter只需要一个参数的函数。尝试将呼叫更改为nlfilter,如下所示:

A = nlfilter(I, [7 7], @(x) dirvar(x,ld));