分割RGB中物体并计算数目

I=imread(im_path);
         axes(handles.axes1);
         imshow(I),
%          title('原始图像');
         
         %计算每个像素点的真实长度
        [x,y]=ginput(2);
        length=str2double(get(handles.edit5,'string'));
        length_pp=length/(sqrt(((x(1)-x(2))^2+(y(1)-y(2))^2)));
        
        %图像变换
        [row,col]=size(I);
        I2=rgb2gray(I);
        clear I;
        %图像增强,提高图像对比度
        J=imadjust(I2);
        BW=im2bw(J,0.5);%0.20
        figure,imshow(I2),title('灰度图像');
        figure,imshow(BW),title('二值图像');
        figure,imshow(J),title('对比度增强');

        % 图像运算,消除二值图像的的噪声和中空的区域
        se = ones(2);
        bw_erode=imerode(BW,se);
        bw_delate=imdilate(bw_erode,se);

        %清除临时变量,减少内存使用
        clear BW;
        clear I2;
        clear bw_erode;
        L1=bwlabel(bw_delate,8);
        clear L1;
        %figure, imshow(bw_erode);
        % 
        % % %
        % %填充了已有的检测的连续形状边界L
        bw_fill = imfill(~bw_delate,'holes');
        clear bw_delate;
        %B = bwmorph(B,'remove');
        figure,imshow(bw_fill),title('填充后的图像');
        % % 
        %去除面积较小的的噪声区域
        cc = bwconncomp(bw_fill);
        stats = regionprops(cc, 'Area');
        clear bw_fill;
        %去掉标签范围<100*100 的区域
        idx = find([stats.Area] >20000);%
        bw_ismember = ismember(labelmatrix(cc), idx);
        clear idx;
        [L,num] = bwlabel(bw_ismember,8);
        figure, imshow(~bw_ismember),title('分割后的图像');
        %标记已经分割好的图像,
        cc1 = bwconncomp(bw_ismember);
        clear bw_ismember;
        clear L;

        %提取每个label 区域的最长轴,即为枣的长度
        stats1=regionprops(cc1,'MajorAxisLength');
        %定义枣长度矩阵,枣品相矩阵
        result_len=double(ones(1,num));
        result_quli=cell(1,num);

        %计算每个枣的长度并显示,通过枣的长度判断其的品相
       
        td=0;yd=0;ed=0;
        s='';
        for i=1:num
            %计算每个枣的长度并以cm表示
            result_len(i)=(stats1(i).MajorAxisLength)*length_pp;
            if(result_len(i)>tedeng)
                result_quli(i)={'特等'};
                td=td+1;
            elseif(result_len(i)>=erdeng&&result_len(i)<=tedeng)
                result_quli(i)={'一等'};
                yd=yd+1;
            elseif(result_len(i)<erdeng)
                result_quli(i)={'二等'};
                ed=ed+1;
            end
            fprintf('第%d个枣的长度:%fcm,等级:%s\n',i,result_len(i),result_quli{i});
            if i<10
                si=['第','0',num2str(i),'个枣长度:',num2str(result_len(i)),',等级:', result_quli{i},';     '];
            else
                si=['第',num2str(i),'个枣长度:',num2str(result_len(i)),',等级:', result_quli{i},';     '];
            end
            s=[s si];
        end
        
        s=[s '一共:',num2str(num),'个枣;  ','其中特等:',num2str(td),'个;  ','一等:',num2str(yd),'个;  ','二等:',num2str(ed),'个;  '];
        set(handles.text2,'string',s);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值