MatLab计算图像圆度

本文所述方法可以检测同一图像中的多个圆形(准确的说,应该是闭合图像)。

在Matlab2010a中可以实现。

附录效果图:

 

%颗粒圆度 clear;close all; %% %读取源图像 I = imread('999.png'); figure;imshow(I); %% %灰度化、取反 h = rgb2gray(I); figure;imshow(h);%灰度图像 h = imcomplement(h);%取反 figure;imshow(h); %% %中值滤波、二值化 h = medfilt2(h,[4,4]); bw = im2bw(h,graythresh(h)); %% %消除噪点 se = strel('disk',2); bw = imclose(bw,se); figure;imshow(bw); %% %填补闭合图形,填充色为白色 bw  = imfill(bw,'holes'); %% %边界寻找 [B,L] = bwboundaries(bw,'noholes'); % 为每个闭合图形设置颜色显示 figure;imshow(label2rgb(L, @jet, [.5 .5 .5])) hold on for k = 1:length(B)   boundary = B{k};   plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2) end %% %计算面积 stats = regionprops(L,'Area','Centroid');

threshold = 0.94;

% 循环处理每个边界,length(B)是闭合图形的个数,即检测到的陶粒对象个数 for k = 1:length(B)

  % 获取边界坐标'   boundary = B{k};

  % 计算周长   delta_sq = diff(boundary).^2;   perimeter = sum(sqrt(sum(delta_sq,2)));

  % 对标记为K的对象获取面积   area = stats(k).Area;

  % 圆度计算公式4*PI*A/P^2   metric = 4*pi*area/perimeter^2;

  % 结果显示   metric_string = sprintf('%2.2f',metric);

  % 用一个黑色小圆圈标记圆度大于threshold = 0.94 的对象   if metric > threshold     centroid = stats(k).Centroid;     plot(centroid(1),centroid(2),'ko');   end %设置显示字体   text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y',...        'FontSize',14,'FontWeight','bold');

end

title(['圆度识别结果,越圆越接近1,']);

 


 

  • 10
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值