我想为给定矩阵点构建一个3x3块,该块位于块的中心。这是我的代码:
function frmBlock = fetchNeighbors(frame, row, column)
%Create a 3x3 matrix contains the neighbors of the point(x, y)
%[n, m] = size(frame);
frmBlock = zeros(3, 3);
x = floor(row);
y = floor(column);
frmBlock(1) = frame(x-1, y-1);
frmBlock(2) = frame(x, y-1);
frmBlock(3) = frame(x+1, y+1);
frmBlock(4) = frame(x-1, y);
frmBlock(5) = frame(x, y);
frmBlock(6) = frame(x+1, y);
frmBlock(7) = frame(x-1, y+1);
frmBlock(8) = frame(x, y+1);
frmBlock(9) = frame(x+1, y-1);
end
如您所见,我创建了一个由0初始化的3x3矩阵。我想要做的是用输入(行,列)中坐标的所有邻居填充该矩阵。如果由于某种原因我无法得到邻居,我什么都不做(即让3x3块中的位置为0)。
当我运行此代码时,我收到错误消息:
Error using fetchNeighbors (line 12) Index exceeds matrix dimensions.
有人可以帮忙吗?
答案 0 :(得分:3)
我猜这个错误是因为您将row
和column
放在矩阵frame
的边界上,然后当你尝试访问右侧或左侧或下方或上方的元素(取决于您所在的边界),您是超出范围,这会引发错误。例如,如果row
等于1
,则表示您在某个时候尝试访问frame(0,column)
,这是非法的。
您可以通过在访问矩阵之前添加一个检查(使用if
语句)来解决此问题,以确保您处于边界内。我在这里添加了另一种方法:
function frmBlock = fetchNeighbors(frame, row, column)
% Create a 3x3 matrix that contains the neighbors of the point (row,column)
[n,m] = size(frame);
neighbors_x = max(row-1,1):min(row+1,n);
neighbors_y = max(column-1,1):min(column+1,m);
frmBlock = zeros(3,3);
frmBlock(neighbors_x-row+2,neighbors_y-column+2) = frame(neighbors_x,neighbors_y);
end