好吧,我不知道如何用标题来描述我的问题,我希望我得到的那个是正确的。
我有一个矩阵(M
在下面的示例中),它是一个 3D 图像,在这种情况下,由11x11x11体素组成(我将其设为逻辑只是为了方便,大小也只是一个示例)。
在我的代码中,我需要到达一些体素的 26 个邻居,为此我使用了一些花哨的线性索引: http: //www.mathworks.com/matlabcentral/answers/86900-how-to-find-all -n维矩阵中元素的邻居
问题是,如果尝试访问某些超出范围的值point
的“边界” ,那将产生错误。M
为了解决这个问题,一个好的方法是M
在每个维度上创建一个边界,使其大小为 +2,并用零填充,但是我真的想避免更改M
,因为我的代码比这个例子。
我找不到任何方法,我有点卡在这里。有什么建议吗?
编辑: @Dan 回答有效,但是我想看看是否有使用这种线性索引方法的可能解决方案。
% Example data
M=round(randn(11,11,11))~=0;
% Fancy way of storing 26 neigh indices for good accesing
s=size(M);
N=length(s);
[c1{1:N}]=ndgrid(1:3);
c2(1:N)={2};
neigh26=sub2ind(s,c1{:}) - sub2ind(s,c2{:});
point=[5 1 6];
% This will work unless the point is in the boundary (like in this example)
neighbours=M(sub2ind(s,point(1),point(2),point(3))+neigh26)