只是一个矩阵问题,可能很简单,我无法弄清楚。假设我有一个20 x 20的矩阵A.我有另一个矩阵B,它的大小相同但是合乎逻辑。我喜欢A中的任何元素,这个位置在' 1'之内。在B中,要改为0。
詹姆斯
答案 0 :(得分:2)
图像处理工具箱包含一个函数imdilate
,可以填充B
附近的1
的位置也是1
s。然后我们只使用A
的逻辑索引。您提到的距离是使用欧氏距离计算的。如果您想要棋盘距离,请改用neighborhood = ones(2*R+1)
。
R = 3;
[X,Y] = ndgrid(-ceil(R):ceil(R));
neighborhood = (X.^2 + Y.^2)<=R^2;
A(imdilate(B,neighborhood)) = 0;
答案 1 :(得分:2)
<强>代码强>
bsxfun
基于解决此类问题的方法 -
%// Form random A and B for demo purposes
N = 50; %// input datasize
A = rand(N);
B = rand(N)>0.9;
R = 2; %// neighbourhood radius
%// Find linear indices offsets within 2R*2R neighbourhood
offset_displacement = bsxfun(@plus,(-R:R)',[-R:R]*size(A,1)); %//'
offset_matches = bsxfun(@plus,(-R:R)'.^2,[-R:R].^2) <= R*R; %//'
offset_matched_displacement = offset_displacement(offset_matches);
%// Use those offsets to find actual linear indices for all '1' points in B
loc = bsxfun(@plus,find(B),offset_matched_displacement'); %//'
%// Set "eligible" points (based on loc) to zeros in A
A(loc(loc>=1 & loc<=numel(A)))=0;
调试输入&amp;输出 -