检测图像中的圆形

%% 加载图像
% 此示例使用包含各种颜色的圆形塑料片的图像。
rgb = imread('picture_yuan.png');
imshow(rgb);
%% 确定搜索圆的半径范围
% imfindcircles 需要半径范围来搜索圆。
% 找到合适半径范围的快速方法是使用交互式工具 imdistline 获得各种对象半径的近似估计值。
d = imdistline;
% imdistline 会创建一个可拖动的工具,可以移动该工具以匹配塑料片,并且可以读取数字以获得其半径的近似估计值。
%大多数塑料片的半径在 21-23 个像素的范围内。为保险起见,请使用稍大一点的半径范围(20-25 个像素)。
%在此之前,请删除 imdistline 工具。

delete(d);
%% 寻找圆的初步尝试
%请对此图像调用 imfindcircles,使用的搜索半径为 [20 25] 像素。
%在此之前,最好要清楚对象是比背景亮还是比背景暗。

gray_image = rgb2gray(rgb);
imshow(gray_image);
% 背景相当亮,大多数塑料片比背景暗。
%但是,默认情况下,imfindcircles 会找到比背景亮的圆形对象。
%因此,在 imfindcircles 中将参数 'ObjectPolarity' 设置为 'dark' 以搜索较暗的圆。
% [centers,radii] = imfindcircles(rgb,[20 25],'ObjectPolarity','dark');
%% 提高检测敏感度
%回到塑料片图像,在默认敏感度水平下,可能所有圆都低于内部阈值,因此未检测到圆。
%'Sensitivity' 是介于 0 和 1 之间的数字,默认设置为 0.85。将 'Sensitivity' 提高到 0.9。

[centers,radii] = imfindcircles(rgb,[20 25],'ObjectPolarity','dark', ...
    'Sensitivity',0.98);
%% 在图像上绘制圆
%函数 viscircles 可用于在图像上绘制圆。来自 imfindcircles 的输出变量 centers 和 radii 可以直接传递给 viscircles。

imshow(rgb)
h = viscircles(centers,radii);
%% 使用第二种方法(两阶段)寻找圆
%此方法的结果看起来更好。imfindcircles 有两种不同寻找圆的方法。
%到当前为止,默认方法(称为相位编码方法)用于检测圆。
%在 imfindcircles 中还可以使用另一种方法,通常称为两阶段方法。使用两阶段方法并显示结果。

[centers,radii] = imfindcircles(rgb,[20 25],'ObjectPolarity','dark', ...
          'Sensitivity',0.96,'Method','twostage');

delete(h)
h = viscircles(centers,radii);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大桃子技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值