Входной аргумент не определен - функция / подфункция MATLAB - PullRequest
1 голос
/ 17 апреля 2011

Я тестирую часть функции для моей работы в 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 ]

1 голос
/ 17 апреля 2011

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
0 голосов
/ 17 апреля 2011

У меня нет набора инструментов для обработки изображений, поэтому я не могу проверить это сам, но похоже, что nlfilter ожидает функцию только одного аргумента.Попробуйте изменить вызов на nlfilter следующим образом:

A = nlfilter(I, [7 7], @(x) dirvar(x,ld));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...