matlab 区域计算问题,求一段 matlab 程序

现有由0和1组成的数组,求一个程序,能自动计算数组中由1组成区域的个数(区域可能可能规则,也可能不规则),每个区域中1的数量以及区域中心位置。比如说以下数组:

 J=zeros(100);
J(50:59,30:39)=1;
J(50:59,70:79)=1;
J(50:59,50:59)=1;
J(70:79,40:49)=1;
 J = zeros(100);
J(50:59,30:39)=1;
J(50:59,70:79)=1;
J(50:59,50:59)=1;
J(70:79,40:49)=1;

[rows, columns] = size(J);
count = 0;

% 找到一个值为1的点的坐标
[y, x] = find(J==1, 1);
while ~isempty(y)
    count = count + 1;
    flag = 1;
    ns = 1;
    sy(1) = y;
    sx(1) = x;
    while flag
        nns = 0;
        nsy = [];
        nsx = [];
       % 向周围扩散
       for i = 1:ns
           J(sy(i), sx(i)) = 0;
           % top
           if sy(i) > 1 && J(sy(i)-1, sx(i))==1
               nns = nns + 1;
               nsy(nns) = sy(i) - 1;
               nsx(nns) = sx(i);
           end
          % down
           if sy(i) < rows && J(sy(i)+1, sx(i))==1
               nns = nns + 1;
               nsy(nns) = sy(i) + 1;
               nsx(nns) = sx(i);
           end
          % left
           if sx(i) > 1 && J(sy(i), sx(i)-1)==1
               nns = nns + 1;
               nsy(nns) = sy(i);
               nsx(nns) = sx(i) - 1;
           end
          % right
           if sx(i) < columns && J(sy(i), sx(i)+1)==1
               nns = nns + 1;
               nsy(nns) = sy(i);
               nsx(nns) = sx(i) + 1;
           end
       end

       ns = nns;
       sy = nsy;
       sx = nsx;

       if ns == 0
           flag = 0;
       end

    end

    [y, x] = find(J==1, 1);
end

disp(count);