我有一个值为1,0和2的矩阵,我希望将所有与2相邻的零改为2。任何有效的方法来解决这个问题?
需要解决的最后一个问题是,我需要对从矩阵中最初设置的2组中可以达到的所有0进行“着色”。 (运行上面的“函数”n ^ 2次),人们可以将问题看作是一个破坏问题,其中1是矩形网格的阻塞位置。
答案 0 :(得分:2)
首先定义邻域。如果你想要8个邻居使用这个内核:
kernel = [1 1 1;1 0 1; 1 1 1];
如果你想要4个直接邻居使用这个内核:
kernel = [0 1 0;1 0 1; 0 1 0];
您可以使用conv2来测试某个点的邻域是否包含2。
test_neighbors = conv2(A==2, kernel,'same') > 0;
该点的值也应为0
test_A = A == 0;
然后应满足两个条件:
test = test_neighbors & test_A;
将这些点设置为2
A(test) = 2;
一体化:
A(conv2(A==2, kernel,'same') & ~A)=2;