给出一个像素坐标如何提取他的所有邻居?

时间:2017-04-20 15:21:33

标签: matlab image-processing

我想为给定矩阵点构建一个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.

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

我猜这个错误是因为您将rowcolumn放在矩阵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