考虑像
这样的矩阵A = 0 1 0 1
1 1 0 0
0 0 0 0
1 1 1 1
我想计算每个1的集群的平均大小。当两个或多个1彼此靠近时,即在旁边或上方/下方时,我将群集定义为发生。例如,在该矩阵中,左上角有一个大小为3的簇,底行有一个大小为4的簇。
我需要一种以非可视方式提取这些信息的方法,因为我需要为不同的A多次这样做。
答案 0 :(得分:3)
您可能希望使用bwlabel
隔离二进制矩阵中的连接组件( 1 的簇)。
A = [0 1 0 1
1 1 0 0
0 0 0 0
1 1 1 1 ];
[L,n] = bwlabel(A,8) % # for a 8-pixel stencil
% # (i.e. hor/vert/diag first neighbors)
或
[L,n] = bwlabel(A,4) % # for 4-pixel stencil
% # (just horizontal & vertical neighbors)
L = 0 1 0 3
1 1 0 0
0 0 0 0
2 2 2 2
这样做,您获得了一个矩阵L
,标记 n
个不同的连接组件。
然后你可能想要提取一些统计数据;例如,您可能希望对群集的大小进行直方图。
cluster_size = hist(L(:),0:n);
cluster_size = cluster_size(2:end); % # histogram of component vs. size
% # (without zeros)
hist(cluster_size) % # histogram of sizes
告诉你,你有一个1个元素的集群,一个3个集群和一个4个集群。
最后,如果您要查找群集的平均大小,可以执行
mean(cluster_size)
2.6667