Matlab的学习历程:统计棋盘连通分量(空值区域)的大小和个数

7 min read Page Views

1.问题引入

在20x20的棋盘矩阵中,设定黑子为1,空值为0,如下所示:

图片

图片

现需要统计空值(连通分量)的大小和个数并标记,如下所示:

图片

图片

图片

以此类推……

其中,最大的连通分量如下所示:

图片

2.matlab程序

以连通分量大小为6举例,对其进行红色标记,并且统计其数量,matlab程序如下所示:

clear,clc,close all
m = 20;
n = 20;
markersize = floor(80-(max([m n])));
rng('default');
A = randn(m,n);
A(abs(A)<=1) = 1;
A(abs(A)>1) = 0;
Ar = 1-A;
cc4 = bwconncomp(Ar,4);
L4 = labelmatrix(cc4);

counts = [];
for i = 1:numel(cc4.PixelIdxList)
    idx = cc4.PixelIdxList{1,i};
    Ar(idx) = numel(cc4.PixelIdxList{1,i});
    counts(i) = numel(cc4.PixelIdxList{1,i});
end
size=flip(unique(counts));

fprintf('编号\t\t连通分量大小\t\t个数\n');
for i = 1:numel(size)
    fprintf('%d\t\t\t%d\t\t\t%d\n',i,size(i),sum(counts==size(i)));
end
fprintf('连通分量总个数:%d\n',cc4.NumObjects);

mark = 6; % 需要标记的连通分量大小
Ar(Ar~=mark)=0;
fprintf('原始棋盘矩阵:\n');
disp(A); % 黑子为1,空值为0
fprintf('红色标记的棋盘矩阵:\n');
disp(Ar); % 红子为1,其余为0
go(A,markersize,m,n,[],[],[])
go(A,markersize,m,n,Ar,mark,sum(counts==mark))

function go(A,markersize,m,n,Ar,mark,count)
    figure('color',[1 1 1],'position',[600,100,400*1.5,400*1.5]);
    hold on
    spy(A,'k',markersize);
    spy(Ar,'r',markersize);
    axis([1 n 1 m]);
    xticks([1:n]);
    yticks([1:m]);
    xlabel("红色标记的连通分量大小为:"+mark+",个数为:"+count);
    ax = gca;
    ax.GridColor = [0 .5 .5];
    ax.GridLineStyle = '-';
    ax.GridAlpha = 0.5;
    ax.Layer = 'top';
    ax.XRuler.TickLabelGapOffset = 20;
    ax.YRuler.TickLabelGapOffset = 20;
    ax.YAxis.Label.Visible = 'off';
    grid on
end

3.效果展示

编号		连通分量大小		个数
1			10			1
2			8			1
3			7			2
4			6			4
5			5			2
6			4			2
7			3			3
8			2			12
9			1			22
连通分量总个数:49
原始棋盘矩阵:
     1     1     1     0     0     1     0     1     1     0     1     0     0     0     1     1     0     0     1     0
     0     0     1     1     1     1     1     1     1     1     0     0     1     0     1     1     1     1     1     1
     0     1     1     1     1     1     0     0     0     1     1     0     1     1     1     1     1     1     0     1
     1     0     1     0     0     1     0     1     0     1     1     1     1     1     0     1     1     1     1     1
     1     1     1     0     1     1     1     1     0     1     1     0     1     1     1     1     1     1     1     0
     0     0     1     1     1     1     1     1     1     0     1     1     0     0     1     1     1     0     1     0
     1     1     1     0     1     1     0     0     0     0     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     0     1     1     0     0     1     1     1     1     0     1
     0     1     0     0     1     0     1     0     1     1     1     1     1     1     0     1     0     1     1     1
     0     1     0     0     0     1     0     1     1     1     1     1     1     1     0     1     0     1     1     1
     0     1     1     1     0     0     1     1     0     1     1     1     1     1     1     1     1     1     0     1
     0     0     1     1     1     1     1     1     0     1     0     0     1     0     0     1     0     1     1     1
     1     0     0     1     1     0     0     1     0     1     1     1     1     0     0     1     1     1     1     1
     1     1     0     1     0     0     1     1     1     1     1     1     1     1     1     0     0     0     1     0
     1     0     1     1     1     1     1     0     1     1     1     1     1     1     1     0     1     0     1     1
     1     0     0     0     1     1     1     1     1     1     0     1     1     1     1     1     1     1     1     1
     1     1     1     0     1     0     0     1     1     0     1     1     0     0     0     0     0     1     1     0
     0     1     1     1     0     0     0     0     1     1     1     0     0     1     1     1     0     1     1     1
     0     0     1     1     1     1     1     1     1     1     0     1     0     1     0     1     0     1     0     1
     0     0     0     1     0     0     1     1     1     1     1     0     1     1     0     1     1     1     0     1

红色标记的棋盘矩阵:
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     6     6     6     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     6     0     6     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     6     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     6     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     6     6     6     6     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     6     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     6     6     0     0     0     0     0     0     0     0     0     0     0     0     0
     6     0     0     0     6     6     6     6     0     0     0     0     0     0     0     0     0     0     0     0
     6     6     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     6     6     6     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0

图片

图片

Last updated on 2025-05-13