theagao 2014-07-26 07:50 采纳率: 0%
浏览 3413

matlab图像区域标号问题,谢谢!

一个矩阵,比如A=
[7,7,7,4,4,4,4,5;
4,4,4,4,5,4,5,5;
5,5,5,5,5,5,5,5;
5,5,5,1,1,1,1,1;
1,1,1,1,1,1,1,1;
1,1,1,4,4,4,4,4];
怎么将不同的区域标成1,2,3,,,即使是相同的类标号,不在同一个区域也要分开。
即如何成为B=
[1,1,1,2,2,2,2,3;
2,2,2,2,3,2,3,3;
3,3,3,3,3,3,3,3;
3,3,3,4,4,4,4,4;
4,4,4,4,4,4,4,4;
4,4,4,5,5,5,5,5;]

  • 写回答

1条回答

  • shiter 人工智能领域优质创作者 2015-01-20 03:19
    关注
     I=imread('1.jpg');
    f=rgb2gray(I);
    f1=im2bw(f,192/240);
    BW1=double(f1);
     BW=edge(BW1,'sobel',0.4);
    r_max=90;
    r_min=20;step_r=10;step_angle=pi/6;p=0.3;
    % p:阈值,0,1之间的数
    % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % output
    % hough_space:参数空间,h(a,b,r)表示圆心在(a,b)半径为r的圆上的点数
    % hough_circl:二值图像,检测到的圆
    % para:检测到的圆的圆心、半径
    [m,n] = size(BW);
    size_r = round((r_max-r_min)/step_r)+1;
    size_angle = round(2*pi/step_angle);
    hough_space = zeros(m,n,size_r);
    [rows,cols] = find(BW);
    ecount = size(rows);
    % Hough变换
    % 将图像空间(x,y)对应到参数空间(a,b,r)
    % a = x-r*cos(angle)
    % b = y-r*sin(angle)
    for i=1:ecount
        for r=1:size_r
            for k=1:size_angle
                a = round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));
                b = round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));
                if(a>0&&a<=m&&b>0&&b<=n)
                    hough_space(a,b,r) = hough_space(a,b,r)+1;
                end
            end
        end
    end
    % 搜索超过阈值的聚集点
    max_para = max(max(max(hough_space)));
    index = find(hough_space>=max_para*p);
    length = size(index);
    hough_circle = false(m,n);
    for i=1:ecount
        for k=1:length
            par3 = floor(index(k)/(m*n))+1;
            par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;
            par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;
            if((rows(i)-par1)^2+(cols(i)-par2)^2<(r_min+(par3-1)*step_r)^2+5&&...
                    (rows(i)-par1)^2+(cols(i)-par2)^2>(r_min+(par3-1)*step_r)^2-5)
                hough_circle(rows(i),cols(i)) = true;
            end
        end
    end
    % 打印检测结果
    for k=1:length
        par3 = floor(index(k)/(m*n))+1;
        par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;
        par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;
        par3 = r_min+(par3-1)*step_r;
        fprintf(1,'Center %d %d radius %d\n',par1,par2,par3);
        para(:,k) = [par1,par2,par3];
    
    end
    
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示