MATLAB将1添加到特定元素周围的矩阵元素

时间:2014-09-30 02:27:00

标签: matlab matrix indexing

使用MATLAB,我有一个矩阵,如:

1 1 0
1 0 1
1 1 1

目的是在扫雷程序中将零代表为地雷,并且0周围的值应反映与其相邻的多少个地雷。

因此创建一个这样的矢量:

1 2 0 
1 0 2
1 1 1

我曾考虑将零点周围的元素作为子矩阵然后加1,然后将0变为1。

我该如何编写这样的任务?

3 个答案:

答案 0 :(得分:4)

我认为这可以通过简单的卷积加上对结果矩阵的一些后处理来实现,如下所示:

% Defining a 6x6 matrix of zeros and ones

mineMat=randi(2,6,6)-1;
numberOfMines=conv2(double(~mineMat),ones(3,3),'same').*mineMat;

% Result:

mineMat=

 1     0     1     1     0     0
 0     0     0     1     0     0
 1     1     1     1     1     0
 1     1     1     1     0     1
 0     1     0     0     0     0
 0     1     1     0     0     0

numberOfMines=

 3     0     3     3     0     0
 0     0     0     3     0     0
 2     3     2     3     4     0
 1     2     2     4     0     4
 0     3     0     0     0     0
 0     3     3     0     0     0

答案 1 :(得分:0)

Parag's answer将是我的第一选择。另一种方法是使用blockproc(图像处理工具箱):

blockproc(~M, [1 1], @(x)sum(x.data(:)), 'Bordersize', [1 1], 'TrimBorder', 0).*M

答案 2 :(得分:0)

听起来您正在寻找应用(二维)过滤器:

M = [1 1 0; 1 0 1; 1 1 1]==0;

F = filter2(ones(3),M);
F(M)=0

中间线基本上完成工作(应用过滤器)来创建计数。最后一行确保地雷保持在0的值。