在矩阵中计算彼此相邻的相同元素

时间:2013-05-10 07:30:39

标签: matlab

考虑像

这样的矩阵
A =  0     1     0     1          
     1     1     0     0          
     0     0     0     0          
     1     1     1     1             

我想计算每个1的集群的平均大小。当两个或多个1彼此靠近时,即在旁边或上方/下方时,我将群集定义为发生。例如,在该矩阵中,左上角有一个大小为3的簇,底行有一个大小为4的簇。

我需要一种以非可视方式提取这些信息的方法,因为我需要为不同的A多次这样做。

1 个答案:

答案 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

enter image description here

告诉你,你有一个1个元素的集群,一个3个集群和一个4个集群。

最后,如果您要查找群集的平均大小,可以执行

mean(cluster_size)

     2.6667