提取图像的边界,用数字标记不同的目标边界

<span style="font-size:18px;">I=imread('pillsetc.png');
imshow(I);
I=rgb2gray(I);            %彩色图像灰度化
threshold=graythresh(I);  %设置灰度图像的最佳阈值
bw=im2bw(I,threshold);      %由阈值得到二值图
figure;
imshow(bw);
 bw=bwareaopen(bw,30);    %利用形态学开运算去除图像中小于像素少于30个的目标
 figure;
 imshow(bw);
 se=strel('disk',2);              %形成一个圆的算子
 bw=imclose(bw,se);             %进行闭运算
 bw=imfill(bw,'holes');                %填充图像中的空洞
 figure;
 imshow(bw);
 [B L]=bwboundaries(bw,'noholes');      %寻找图像的边界
 figure;
 imshow(label2rgb(L,@jet,[0.5 0.5 0.5]));    %用彩色图像显示图像的各个目标
 hold on
 %%
 for k=1:length(B)
     boudary=B{k};
     plot(boudary(:,2),boudary(:,1),'w','LineWidth',2)
 end                                       %绘制图像目标的边界    Bc存储的是边界的坐标
 stats=regionprops(L,'Area','Centroid');
 threshold=0.94;
 for k=1:length(B)
     boudary=B{k};
     delta_sq=diff(boudary).^2;                   
     perimeter=sum(sqrt(sum(delta_sq,2)));      %计算边界图像的周长
     area=stats.Area;                                %计算目标的面积
     metric=4*pi*area/perimeter^2;
     metric_string=sprintf('%2.2f',metric);        %保存计算的结果
     if metric>threshold
         centroid=stats(k).Centroid;
         plot(centroid(1),centroid(2),'ko');
     end                                                     %找到各个目标的质心,
     text(boudary(1,2)-35,boudary(1,1)+13,metric_string,'Color','y','FontSize',14,'FontWeight','bold');
 end
 
     </span>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值