#matlab
#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
определено четко!
Ответ №1:
Четан прав в том, что 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
Ответ №2:
У меня нет набора инструментов для обработки изображений, поэтому я не могу проверить это сам, но, похоже, nlfilter
ожидает функцию только с одним аргументом. Попробуйте изменить вызов на nlfilter
следующим образом:
A = nlfilter(I, [7 7], @(x) dirvar(x,ld));
Комментарии:
1. Я снова получаю ту же ошибку!
??? Undefined function or variable 'ld'. 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);