1.2 检测和测量图像中的圆形目标

这篇博客演示了如何使用图像处理技术自动检测图像中的圆形目标。通过调整参数,如敏感度和边缘阈值,可以成功识别不同颜色和对比度的圆,包括重叠或靠得很近的圆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

此示例说明如何自动检测图像中的圆形目标并可视化检测到的圆。

步骤 1:加载图像
读取并显示包含各种颜色的圆形塑料片的图像。除了有大量要检测的圆之外,从圆检测的角度来看,此图像还有一些有趣的特点:

有不同颜色的塑料片,它们相对于背景有不同对比度。一方面,蓝色和红色塑料片在此背景上形成强烈的对比。另一方面,一些黄色塑料片与背景的对比不明显。

请注意一些塑料片重叠在一起,而另一些塑料片则靠得很近,几乎互相接触。对于目标检测来说,场景中存在重叠的对象边缘和对象遮挡通常具有挑战性。

rgb = imread('coloredChips.png');    %加载图像
imshow(rgb);
title('coloredChips');

在这里插入图片描述

步骤 2:确定搜索圆的半径范围
使用 drawline 函数找到合适的圆半径范围。在塑料片的近似直径上绘制一条线。

rgb = imread('coloredChips.png');    %加载图像
imshow(rgb);
title('coloredChips');
d = drawline;         %使用 drawline 函数找到合适的圆半径范围
pos = d.Position;
diffPos = diff(pos);
diameter = hypot(diffPos(1),diffPos(2));

在这里插入图片描述

步骤 3:寻找圆的初步尝试
imfindcircles 函数搜索符合半径范围的圆。搜索半径在 20 到 25 个像素范围内的圆。在此之前,最好要清楚对象是比背景亮还是比背景暗。要回答该问题,请看此图像的灰度版本。

rgb = imread('coloredChips.png');    %加载图像
subplot(1,2,1);
imshow(rgb);
title('coloredChips');
%d = drawline;         %使用 drawline 函数找到合适的圆半径范围
% pos = d.Position;
% diffPos = diff(pos);
% diameter = hypot(diffPos(1),diffPos(2));
gray_image = rgb2gray(rgb);        %转为灰度图像
subplot(1,2,2);
imshow(gray_image);                %显示灰度图像
title('coloredChips灰度图');

在这里插入图片描述
背景相当亮,大多数塑料片比背景暗。但是,默认情况下,imfindcircles 会找到比背景亮的圆形目标。因此,在 imfindcircles 中将参数 ‘ObjectPolarity’ 设置为 ‘dark’ 以搜索较暗的圆。

>> [centers,radii] = imfindcircles(rgb,[20 25],'ObjectPolarity','dark')   %在 imfindcircles 中将参数 'ObjectPolarity' 设置为 'dark' 以搜索较暗的圆

centers =

     []


radii =

     []

请注意,输出 centers 和 radii 为空,这意味着未找到圆。这种情况经常发生,因为 imfindcircles 是圆形检测器,与大多数检测器类似,imfindcircles 有内部检测阈值决定其敏感度。简而言之,这意味着检测器对某个(圆形)检测的信心必须大于某个水平,才将其视为有效检测。imfindcircles 有参数 ‘Sensitivity’,可用于控制此内部阈值,从而控制算法的敏感度。较高的 ‘Sensitivity’ 值会将检测阈值设置得较低,并导致检测到更多圆。这类似于家庭安全系统中使用的运动检测器的敏感度控制。

步骤 4:提高检测敏感度
回到塑料片图像,在默认敏感度水平下,可能所有圆都低于内部阈值,因此未检测到圆。‘Sensitivity’ 是介于 0 和 1 之间的数字,默认设置为 0.85。将 ‘Sensitivity’ 提高到 0.9。

>> [centers,radii] = imfindcircles(rgb,[20 25],'ObjectPolarity','dark', 'Sensitivity',0.9)    %将 'Sensitivity' 设置为 0.9

centers =

  146.1895  198.5824
  328.8132  135.5883
  130.3134   43.8039
  175.2698  297.0583
  312.2831  192.3709
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值