MATLAB添加1';s到特定元素周围的矩阵元素

MATLAB添加1';s到特定元素周围的矩阵元素,matlab,matrix,indexing,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 我如何编写这样的任务?我认为这可以通过简单的卷积加上对结果矩阵的一些后处理来实现,如下所示: % Defining a 6x6 matrix of zeros and ones mineMat=randi(2,6,6)-

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

1 1 0
1 0 1
1 1 1
其目的是在扫雷艇计划中将零表示为地雷,0周围的值应反映与其相邻的地雷数量

因此,创建如下向量:

1 2 0 
1 0 2
1 1 1
我曾想把零附近的元素作为一个子矩阵,然后加上1,但它会把0变成1


我如何编写这样的任务?

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

% 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

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

% 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
这是我的第一选择。另一种方法是使用(图像处理工具箱):

这是我的第一选择。另一种方法是使用(图像处理工具箱):


听起来您希望应用(二维)过滤器:


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

听起来像是要应用(二维)过滤器:


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

您希望
[1 10;1 1;1 0 1]
的输出是什么?您想要
[0 1 0;1 2;1 0 1]
?这会把1,1元素变成一个地雷吗?请考虑通过点击右手边的复选标记来接受最适合你的答案。你想要什么输出?<代码> [1 1 0;1 1 1;1 0 1 ] < /代码>?您想要
[0 1 0;1 2;1 0 1]
?这会把1,1元素变成一个矿吗?请考虑通过点击右手边的复选标记来接受最适合你的答案。
M = [1 1 0; 1 0 1; 1 1 1]==0;

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