小han工 2018-11-25 06:52 采纳率: 0%
浏览 473
已结题

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;
  • 写回答

1条回答

  • crf_moonlight 2018-11-25 07:53
    关注
     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);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退