【图像处理】基于传统图像处理的圆环检测及宽度估算

一、背景

一个需求,识别出下图中的浅蓝色环形区域并计算其宽度。由于拍摄场景固定且在相对密闭的环境中,背景及光线变化小,并且需要部署的硬件设备(普通工控机)配置较低,比较适合使用传统图像处理方法。相比于深度学习方法(实例分割应该更合适),省去了数据采集及标注过程,部署也方便,当然稳定性感觉还是不如深度学习方法,可以作为后续产品升级的方案。

二、具体思路

以下仅分享算法思路,更多还是以学习记录为主。 

1. 前景背景分割

为了后续处理方便,首先需要尽可能去除背景区域,因为目标区域以蓝色像素为主,所以根据颜色差异可以做到将前景和背景分离。

补充(2024-09-06 )

基于HSV颜色空间进行前景背景分割,设置Hue值提取蓝色区域,实测提取效果与RGB通道提取方法几乎无异(在过滤其他颜色上也更有优势),但提取速度明显提升,由0.35s/次缩短至0.003s/次,提升100倍,整体流程也加速63.7%。

2.  颜色增强

增强图像的蓝色通道,进一步区分目标区域。

3. 目标区域提取

对上图进行二值化、形态学处理,提取图像中的连通域,均值滤波平滑噪声并过滤噪声区域,闭操作填充空洞,得到完整的环形区域。

4. 圆检测

此处为比较关键的一步,对二值图像进行边缘提取,得到类圆环区域,使用霍夫圆检测出一个圆形区域,目的是寻找该圆环的中心,以该中心为起始点向外发散寻找圆环。

circles=cv2.HoughCircles(image, cv2.HOUGH_GRADIENT, dp=1, minDist=10, param1=None, param2=None, minRadius=None, maxRadius=None)

参数要根据场景特点进行设置。

minDist:检测到的圆中心(x,y)坐标之间的最小距离。因为每次检测图像中只会出现一个检测目标,也即只会检测一个圆,所以该参数可以设置的相对大些,合并距离相近的圆;

param2:累加平面某点是否是圆心的判定阈值,大于该值时判定为圆心。由于实际检测的目标并非真正的圆,有时为椭圆,有时会有不规则边缘,所以多数情况下只需要近似拟合一个即可。如果该值设置太大会导致检测不到目标,太小会导致检测时间很长,且可能会检测到大量无用圆。

5. 圆环检测及宽度估算 

得到圆心之后,就可以以该点为中心向周围发散,检测内外轮廓上的点,再根据这些点使用椭圆拟合方法得到内外椭圆,同时也能得到各个点对之间的像素距离,最后根据像素与真实距离之间的对应关系,估算得到圆环宽度。

三、总结

基于传统图像处理的检测方法,最大的问题在于其对像素变化的高度敏感,同时每一步的处理都需要设置合理的参数才能达到最终效果,这就需要在测试阶段不断尝试设置不同的参数,直到找到最适合自己的那套参数。

如果环境发生变化,如光照变化、材料变化、拍摄终端变化等,都可能导致最终结果出现差异,因此需要尽可能保证环境的稳定性。与深度学习方法相比,省去了炼丹的时间,但调参的工作一点没少😂,而且很难保证一套参数适应多种场景变化。如果后期应用场景逐渐增加,场景变化差异大,检测效果不好,那最后还是得炼丹🙃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值