【问题标题】:Convert adjacent elements of matrix in Matlab在Matlab中转换矩阵的相邻元素
【发布时间】:2015-03-09 14:37:01
【问题描述】:
我正在研究 Brushfire 算法,我需要创建一个循环,该循环将扫描矩阵并找到与 1 相邻的零并将“1”转换为“2”。假设我有一个 5 乘 5 的矩阵:
0 0 0 0 0
0 1 1 1 1
0 0 1 1 1
0 0 1 1 1
0 0 1 1 1
我能做到吗:
0 0 0 0 0
0 2 2 2 2
0 0 2 1 1
0 0 2 1 1
0 0 2 1 1
谢谢
【问题讨论】:
标签:
algorithm
matlab
matrix
【解决方案1】:
使用图像处理工具箱,算法将是:
A = [0 0 0 0 0
0 1 1 1 1
0 0 1 1 1
0 0 1 1 1
0 0 1 1 1];
B = A;
%# set pixels at border between 0 and 1 to 2
B(imdilate(~A,true(3)) & A>0) = 2;
【解决方案2】:
您可以使用标准函数 conv2 使用 2D 卷积来实现。将您的矩阵表示为X,
mask = [0 1 0; 1 1 1; 0 1 0]; %// or [1 1 1; 1 1 1; 1 1 1] to include diagonal adjacency
X(conv2(double(~X), mask, 'same') & X) = 2;