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

一、基础设定

在20x20的棋盘矩阵中,设定黑子为1,空值为0

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

以此类推

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

二、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

三、输出结果

编号		连通分量大小		个数
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值