自动检测图像中的圆形目标并可视化检测到的圆

简介: 说明如何自动检测图像中的圆或圆形目标并可视化检测到的圆。

一、前言
此示例说明如何自动检测图像中的圆或圆形目标并可视化检测到的圆。
二、实现步骤
步骤 1:加载图像
读取并显示包含各种颜色的圆形塑料片的图像。除了有大量要检测的圆之外,从圆检测的角度来看,此图像还有一些有趣的特点:
1.png

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

2.png

线 ROI 的长度就是塑料片的直径。通常的塑料片的直径在 40 到 50 个像素的范围内。

步骤 3:寻找圆的初步尝试
imfindcircles 函数搜索符合半径范围的圆。搜索半径在 20 到 25 个像素范围内的圆。在此之前,最好要清楚对象是比背景亮还是比背景暗。
3.png

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

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

步骤 4:提高检测敏感度
回到塑料片图像,在默认敏感度水平下,可能所有圆都低于内部阈值,因此未检测到圆。“Sensitivity”是介于 0 和 1 之间的数字,默认设置为 0.85。将“Sensitivity”提高到 0.9。这次,imfindcircles 发现了一些圆 - 准确地说是八个。centers 包含圆心的位置,radii 包含这些圆的估计半径。

步骤 5:在图像上绘制圆
函数 viscircles 可用于在图像上绘制圆。来自 imfindcircles 的输出变量 centers 和 radii 可以直接传递给 viscircles。
4.png
圆心似乎定位正确,它们对应的半径似乎与实际塑料片匹配良好。但仍未检测到相当多的塑料片。请尝试将“Sensitivity”提高到 0.92。
增加“Sensitivity”会让我们找到更多圆。再次在图像上绘制这些圆。
5.png

步骤 6:使用第二种方法(两阶段)寻找圆
此方法的结果看起来更好。imfindcircles 有两种不同寻找圆的方法。到当前为止,默认方法(称为相位编码方法)用于检测圆。在 imfindcircles 中还可以使用另一种方法,通常称为两阶段方法。使用两阶段方法并显示结果。
6.png

两阶段方法使用敏感度 0.92 检测更多圆。一般来说,这两种方法是互补的,因为它们有不同优点。相位编码方法通常比两阶段方法更快,抗噪声的稳定性稍强。但是,它也可能需要更高的“Sensitivity”水平才能实现与两阶段方法相同数量的检测。例如,如果“Sensitivity”水平提高到 0.95,相位编码方法也会找到相同的塑料片。
7.png

请注意,imfindcircles 中的两种方法都能准确找到部分可见(遮挡)塑料片的中心和半径。

步骤 7:为什么有些圆仍检测不到?
查看最后一个结果,很奇怪 imfindcircles 没有在图像中找到黄色塑料片。黄色塑料片与背景的对比不够强烈。事实上,它们看起来和背景的强度非常相似。是不是黄色塑料片并没有想象中的那样比背景“更暗”?要确认这一点,请再次显示该图像的灰度版本。
8.png

步骤 8:在图像中找到“明亮”的圆
与背景相比,黄色塑料片的强度几乎相同,甚至更亮。因此,要检测黄色塑料片,请将“ObjectPolarity”更改为“bright”。

步骤 9:用不同颜色绘制“Bright”圆
通过更改 viscircles 中的“Color”参数,以不同颜色绘制明亮的圆。
9.png

请注意,找到了三个原先未检测到的黄色塑料片,但仍有黄色塑料片未检测到。这些黄色塑料片很难检测到,因为在这种背景下,它们没有呈现出与众不同。

步骤 10:降低“EdgeThreshold”的值
在这里还可以使用 imfindcircles 中的另一个参数,即“EdgeThreshold”。要查找圆,imfindcircles 仅使用图像中的边缘像素。这些边缘像素基本上是具有高梯度值的像素。“EdgeThreshold”参数控制像素的梯度值必须有多高,才能将其视为边缘像素并包含在计算中。该参数的高值(更接近 1)只允许包含强边缘(较高梯度值),而低值(更接近 0)的宽容度更高,可在计算中包含较弱的边缘(较低梯度值)。对于检测不到黄色塑料片的情况,是因为对比度低,一些边界像素(在塑料片的圆周上)预期具有低梯度值。因此,请降低“EdgeThreshold”参数,以确保黄色塑料片的大多数边缘像素都包含在计算中。
10.png

步骤 11:同时绘制“暗”和“亮”圆
现在 imfindcircles 找到了所有黄色圆,还找到了一个绿色圆。用蓝色绘制这些塑料片,用红色绘制之前发现的其他塑料片(“ObjectPolarity”设置为“dark”)。

11.png

所有圆都被检测到。最后 - 应注意,在检测中更激进地更改参数可能会发现更多圆,但也会增加检测到假圆的可能性。需要在可找到的真圆数量(检测率)和用它们找到的假圆数量(虚警率)之间实现某种平衡。

目录
相关文章
|
定位技术
干货!解决Cesium中Entity移动漂移的问题
案例场景:在Cesium开发三维场景展示中,肯定会碰到加载Entity的需求,如果在你的gis应用中,带了地形的展示。那么在旋转切换画面时,Entity是否跟着一起动了起来,感觉像漂移一样呢?
4109 0
干货!解决Cesium中Entity移动漂移的问题
|
JavaScript 物联网 5G
物联网设备连接的下一个引爆点:4G Cat.1
物联网从概念兴起至今已经过了好几些年了。何为物联网,首先要定义何为“物”(Things),笔者理解所有具备连接能力的设备都可以是物,比如一个手环,一个WiFi台灯,或者NB-IoT水表等。
物联网设备连接的下一个引爆点:4G Cat.1
|
12月前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
18452 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
10月前
|
Unix Linux 虚拟化
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
44821 16
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
117391 0
|
Ubuntu Linux Docker
弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门
弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门
19011 4
|
敏捷开发 小程序 持续交付
【规范】Git分支管理,看看我司是咋整的
本文介绍了Git分支管理规范的重要性及其在企业中的应用。通过规范化的分支管理,可加速团队协作、确保代码质量、维护主分支稳定,并支持敏捷开发。文中详细描述了主分支(如master、develop)和辅助分支(如feature、hotfix)的作用,并提供了实际开发流程示例,包括开发前、开发中、提测、预生产和部署上线等阶段的操作方法。旨在帮助团队提高效率和代码质量。
2961 0
【规范】Git分支管理,看看我司是咋整的
|
网络安全 网络架构 数据安全/隐私保护
树莓派通过网线连接电脑(校园网也能连接),实现SSH连接
树莓派通过网线连接电脑(校园网也能连接),实现SSH连接
|
开发工具 git
掌握Git必备:最常用的50个Git命令
掌握Git必备:最常用的50个Git命令
593 0
|
数据可视化 数据处理 计算机视觉
Grounded-SAM模型:自动化检测、分割、生成一切
借着Meta发布的Segment Anything视觉大模型,作者团队做了一个最强Zero-Shot视觉应用:最强的Zero-Shot检测器,最强的Zero-Shot分割器,最强的Zero-Shot生成器,三合一模型简称为Grounded-SAM。