Я тестирую функцию, содержащую nlfilter
на матрице.Для этого я создал случайную матрицу 11X11 и использую движущееся окно 7x7 с помощью nlfilter
.Моя функция выглядит следующим образом:
function funct(fh)
I = rand(11,11)
ld = input('Enter the lag = ') % prompt for lag distance
fh = @dirvar,@diagvar;
A = nlfilter(I, [7 7], fh);
% Subfunction
function [h] = dirvar(I)
c = (size(I)+1)/2
EW = I(c(1),c(2):end)
h = length(EW) - ld
end
% Subfunction
function [h] = diagvar(I)
c = (size(I)+1)/2
NE = diag(I(c(1):-1:1,c(2):end))
h = length(NE) - ld
end
end
Когда я запускаю funct('dirvar')
, он запрашивает задержку, выбирает 4 элемента первой строки и прогрессирует элемент за элементом.С 9-го по 11-й элемент первого ряда он принимает 0 с в качестве последних элементов (автоматическое заполнение), что является ожидаемым поведением.
Но когда я запускаю funct('diagvar')
, функция ведет себя так же (как в dirvar ) вместо выделения элементов по диагонали и перехода на отступы.Для 1-го ряда я ожидаю, что он выберет первый элемент из первого ряда и 3 нуля и т. Д. До конца строки;когда дело доходит до 2-й строки - 1-го элемента, это будет 2-й ряд - 1-й элемент + 1-й ряд - 2-й элемент, за которым следуют 2 нуля и т. д.
Если я просто создаю случайную матрицу порядка 11X11 и запускаюстроки из diagvar
выбирает центральное значение из матрицы и прогрессирует, как и ожидалось.