我需要访问 3D 中某个点周围的多个索引。例如,对于点 ( x1
, y1
, z1
),我需要获取其 3x3x3 邻域的所有索引,使得 ( x1
, y1
, z1
) 居中。为大小 3 的附近,我做
[x,y,z] = meshgrid(-1:1,-1:1,-1:1);
x_neighbors = bsxfun(@plus,x,x1);
y_neighbors = bsxfun(@plus,y,y1);
z_neighbors = bsxfun(@plus,z,z1);
在这里,我通过添加从 ( , , ) 到 3x3x3 框中任意点的距离来x1
将y1
、、居中。z1
x1
y1
z1
x1
这给了我 ( , y1
, z1
) 3x3x3 邻域的坐标。然后我需要将它们转换为线性索引,以便我可以访问它们:
lin_ind = sub2ind(size(volume),y_neighbors,x_neighbors,z_neighbors);
这是我所做的代价高昂的事情。
我的问题是,如何避免sub2ind
. 如果inx
是 ( x1
, y1
, z1
) 的线性索引,
inx = sub2ind(size(volume),y1,x1,z1);
如何通过加减或任何其他简单操作找到线性索引的 3x3x3 邻域inx
?