在Matlab中检查矩阵元素的周围邻居
我有一个480×640的矩阵在Matlab中检查矩阵元素的周围邻居,matlab,matrix,Matlab,Matrix,我有一个480×640的矩阵a。对于每个像素,我要检查它的邻居。像素的邻域由值N确定。例如,这是矩阵a的一部分,当N=3时,所有的零都是像素X的邻居: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 X 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
a
。对于每个像素,我要检查它的邻居。像素的邻域由值N
确定。例如,这是矩阵a
的一部分,当N=3
时,所有的零都是像素X
的邻居:
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 X 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
如图所示,因为N=3
,所有这些零都是像素X
的邻居。问题在于X
是否位于索引N=3
之前。在这里,邻域将是具有一个值的像素:
X 1 1 1 0 0 0
1 1 1 1 0 0 0
1 1 1 1 0 0 0
1 1 1 1 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
有谁能建议如何处理这个问题吗?最简单的方法是,在数组中填充值,这些值对于所检查的任何内容都不会返回true(例如,如果要查找非零,请填充零,或者如果要查找有限值,请填充
NaN
)padarray
函数可以为您执行此操作,但需要图像处理工具箱*。否则,您可以自己填充阵列。例如,一种未优化的方法可能是
A = rand(m,n);
Apadded = [zeros(N,2*N+n); [zeros(m,N), A, zeros(m,N)]; zeros(N,2*N+n)];
for i = N+1:N+m+1
for j = N+1:N+n+1
% Process neighborhood of A(i,j)
end
end
*还需要注意的是,这些在图像处理中常见的“滑动邻域”操作是