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


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



以此类推
其中,最大的连通分量如下:

以下是红色标记连通分量大小为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


