MATLAB根据周围数据将元素更改为零

时间:2015-02-10 00:31:53

标签: matlab matrix nearest-neighbor

只是一个矩阵问题,可能很简单,我无法弄清楚。假设我有一个20 x 20的矩阵A.我有另一个矩阵B,它的大小相同但是合乎逻辑。我喜欢A中的任何元素,这个位置在' 1'之内。在B中,要改为0。

詹姆斯

2 个答案:

答案 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;输出 -

enter image description here

enter image description here

enter image description here