【发布时间】:2011-08-07 18:13:44
【问题描述】:
我正在矩阵上测试包含nlfilter 的函数。为此,我创建了一个随机 11X11 矩阵,并在nlfilter 的帮助下使用了一个 7x7 移动窗口。我的功能如下:
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 中的一样),而不是选择对角线的元素并进行填充。对于第一行,我希望它从第一行中选择第一个元素和 3 个零,依此类推,直到行尾;当涉及到第 2 行 - 第一个元素时,它将是第 2 行 - 第 1 个元素 + 第 1 行 - 第 2 个元素,后跟 2 个零,依此类推。
如果我只是创建一个 11X11 阶的随机矩阵并从 diagvar 运行行,它会从矩阵中选择中心值并按预期进行。
【问题讨论】:
标签: matlab