1

考虑一个矩阵

A =  0     1     0     1          
     1     1     0     0          
     0     0     0     0          
     1     1     1     1             

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

我需要一种以非可视方式提取此信息的方法,因为我需要为不同的 A 多次执行此操作。

4

1 回答 1

3

您可能希望使用bwlabelwhich 隔离二进制矩阵中的连接组件(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 个元素的集群和一个包含四个元素的集群。

最后,如果您正在寻找集群的平均大小,您可以这样做

mean(cluster_size)

     2.6667
于 2013-05-10T07:36:52.080 回答