资讯动态

基于BLOB分析的多圆定位实践:圆心拟合、坐标标定与运动控制联动

发布时间:2026/10/17 17:23:58 来源:尧图企业网站定制
BLOB分析在机器视觉里听起来好像是高深算法其实它干的活特别朴素在一张图里找出连成一团的像素区域再按面积、圆度、位置筛一筛把所需的圆心坐标稳定地算出来。这次分享的是一套基于BLOB分析的多圆定位例程配合机器视觉运动控制一体机来实现属于我手头这套应用例程的第三篇。前两篇分别讲了整体框架搭建和单目标识别这一篇重点聊多圆场景里的实际问题怎么把多个圆同时找出来怎么算准圆心怎么把像素坐标换算成运动机构能用的物理坐标。工业现场里圆形目标太常见了——瓶盖、药片、轴承、晶圆、手机摄像头模组多到数不过来所以这套例程的价值就在于把圆形目标的定位做实、做稳。适合两类人看一是刚入门视觉、想知道BLOB分析到底怎么落地的人二是已经在做视觉项目但被多目标干扰、光照波动和坐标标定反复折磨过的开发者。1. 项目概览与需求拆解1.1 一体机方案到底解决了什么问题先说说为什么要把这套东西放在一体机上做而不是传统的“工业相机加工控机加运动控制卡”组合。传统方案里相机采集完图像要传给上位机上位机跑完算法再把结果发给运动控制卡中间多了一道甚至两道网络或总线通讯。对于定位精度要求高、节拍要求快的产线哪怕多出来几毫秒延迟都可能造成停机的连锁反应。一体机的思路是把图像采集、算法处理、运动控制全部塞进同一个控制器里视觉程序可以直接给伺服或步进发指令。这样定位结果从算出来到执行中间几乎不需要跨设备传输延迟压到了最低。尤其在多圆定位这种场景里视觉算法算完一堆圆心之后往往要立刻换算成X/Y偏移量和旋转角度紧接着就要驱动机构去补偿闭环越短越稳。这套例程里用的就是一体机自带的视觉软件和运动控制接口视觉部分负责算目标运动部分负责跟动作。坦白讲如果你手头只有普通相机加PC这套思路一样能迁移只是要把结果通过串口或以太网发给控制器。明白了这个背景再往下看算法和调试细节就心里有数了。1.2 多圆定位到底在定位什么多圆定位并不只是“找到好几个圆”这么简单实际项目里大致分成三种形态。第一种是单圆定位的阵列化。比如药板上的药片或者手机盖板上一排定位圆孔目标就是把所有圆的圆心都输出位置用来做阵列组装或缺陷筛查。第二种是几何关系定位最常见的就是找两个圆然后用这两个圆心的连线算出目标当前的旋转角配合一个圆心坐标做一个完整的2D姿态输出。第三种是内圆外圆嵌套的目标比如轴承内外圈、晶圆上的同心圆标记这时候需要同时识别内外圆的圆心和半径。我这次例程覆盖的是前两种的合并场景视野里同时有多个圆其中既有关键的中心圆也有辅助定位圆。通过BLOB分析把所有圆形目标提取出来再按面积、圆度、相互位置关系区分谁是谁最后输出一组圆心的像素坐标和角度信息。这个场景在手机模组装配、PCB对准、精密零件摆盘里都属于标准需求做透一个例子其他项目照葫芦画瓢就行。1.3 为什么首选BLOB分析而不是模板匹配我在前一篇例程里讲过模板匹配的玩法它确实能找圆但多圆场景下我基本不会用。原因有几个。模板匹配对光照变化比较敏感同一个圆在亮一点暗一点的环境下得分会波动阈值不好定。更麻烦的是如果视野里出现多个形状相似的圆模板匹配经常会给出多个相近的匹配结果加上模板匹配本身有分辨率限制想亚像素求圆心还得再补边缘拟合的步骤算力开销也不小。Hough圆检测也是个常见选项但它在多圆场景下调试更头疼累加器参数、圆心间距约束、半径范围都要一顿调而且速度比BLOB分析慢一个量级。最关键的是Hough求粗圆心可以求精细圆心往往还需要二次精定位。BLOB分析的思路完全不一样。它是先把图像二值化把所有连成一片的像素区域全提取出来然后用几何属性去筛选。圆形目标在二值化之后就是一个天然的连通域面积、圆度、重心这些几何特征本身就是“像不像圆”的直接度量。这和人工肉眼找圆的逻辑高度一致每个参数都有物理含义出了问题也知道从哪下手。多圆场景下BLOB分析可以一次性把所有候选区域全部拿到再按条件逐层筛整个过程流水线化速度、稳定性、可解释性都占优。2. 核心原理拆解BLOB分析的关键细节2.1 BLOB分析的基本链路BLOB分析的标准链路是图像预处理、阈值分割、连通域标记、几何特征计算、特征筛选、结果输出。六个环节里每一步都会直接影响后续质量我一个个说。预处理主要做两件事降噪和增强边界。工业相机拍出来的图多少有点传感器噪声直接做阈值分割容易在目标边缘产生毛刺所以一般先做一个高斯平滑或中值滤波。高斯平滑适合整体降噪中值滤波对椒盐噪声更有效我自己习惯先用3x3中值滤波把离散噪点擦掉再用5x5高斯平滑磨一下边缘。阈值分割是整个BLOB分析的灵魂。阈值选得好后面全是省心阈值选得烂后面怎么调特征筛选都费劲。固定的二值化阈值只适合光照极其稳定的场景稍微有点环境光波动目标边缘就会缺一块多一块。所以我一般建议用动态阈值或者大津法让阈值跟随灰度直方图自适应调整。大津法原理不复杂就是自动找一个灰度值让目标和背景两类的类间方差最大实际效果在大多数工业场景里都很能打。连通域标记是BLOB分析的核心算法常见的做法是两遍扫描。第一遍扫描给每个像素打临时标签同时记录标签之间的连通关系第二遍扫描把等价标签合并最终每个连通区域获得唯一编号。这一步做完以后图像里每一团独立的像素区域就都变成了一个独立对象后续所有几何计算都是针对这些对象逐个进行的。2.2 几个关键的几何特征和它们的物理含义BLOB分析背后是一堆几何公式不需要全背下来但有几个特征必须理解透彻。面积最简单就是区域内像素点的总数。一个圆如果直径是100像素面积大约7850像素如果你设的面积范围是500到8000那这个目标刚好卡在边缘很容易误伤。所以设面积范围的时候要留足余量而且我习惯用等效直径来思考等效直径等于两倍根号下面积除以圆周率算出来目标大概多少个像素大再反推面积范围。圆度是判别圆形目标最重要的指标计算公式是圆度等于4π乘面积除以周长的平方。正圆的圆度是1形状越复杂、边缘越不圆润圆度值越小。一个正方形圆度大约是0.785一条细长条可能只有0.1。实际项目里筛圆形目标圆度下限设在0.7到0.9之间比较合理具体看你的圆形目标边缘质量。记住一点圆度对边缘毛刺非常敏感边缘一旦锯齿化周长变大圆度就降。所以预处理阶段把边缘处理干净比后面调圆度阈值更有效。重心也叫质心是用图像矩算出来的一阶矩除以零阶矩就是重心坐标。二值化后的连通域重心对圆的中心位置是一个不错的估计但如果圆内部有孔洞或者边缘残缺重心就会偏移。所以高精度定位不能只靠重心我用重心只做粗定位和排序。除了这些有时还会用到外接矩形、最小外接圆、长轴短轴比等特征作为辅助筛选。比如你要找的目标是标准圆但视野里有一个矩形螺丝和一个小圆矩形螺丝的宽高比很大用长宽比就能直接把螺丝排掉省得后面圆度筛选折腾。2.3 求圆心坐标质心法还是圆拟合法拿到BLOB区域之后圆心怎么求这里有三条路可以走精度和速度各不相同。第一条是直接取重心。速度快到可以忽略不计而且对标准圆形目标精度完全够用。很多项目要求定位精度在0.1毫米以上配合合适的相机分辨率质心的亚像素级别的稳定性完全扛得住。但如果目标边缘缺损明显重心就会偏。第二条是最小二乘圆拟合。做法是先提取BLOB边缘的轮廓点然后把这些点带入圆的方程用最小二乘法求解出最优的圆心和半径。这条路对边缘缺损不敏感只要边缘点数量足够多且分布均匀拟合出来的圆心位置会比质心稳得多。精度可以做到亚像素级别是当前工业界主流的精定位方案。第三条是计算最小外接圆或最大内接圆的圆心。前者偏向轮廓的外侧后者偏向内部在同心圆检测里有用但通用性不如前两者。我的实践建议是如果是粗定位或者目标本身质量很好直接用质心就够如果对重复精度要求高或者目标边缘可能有缺陷那必须上最小二乘圆拟合。在一体机里两步走的方案也常见先用质心粗筛出目标再在目标ROI内提取边缘点做圆拟合既保证速度又拿精度。3. 实操过程从图像采到坐标输出3.1 成像环境与光源选择多圆定位的第一个坑往往不在算法而在成像。BLOB分析对二值化的结果很敏感二值化质量取决于目标与背景的灰度差而灰度差靠光源和曝光来保证。圆形目标分两类成像情况。第一类目标是表面本身有灰度差异的比如深色橡胶圈放在浅色传送带上这时候用环形光源或者条形光源正面打光就行目标与背景天然有对比。第二类是要测轮廓的比如金属垫圈、透光玻璃片上的圆形标记这类最好用背光源。背光一打目标变成黑色剪影背景变成白色亮场二值化之后的边缘极其锐利BLOB提取的周长和圆度都更准确。我在例程里用的是背光方案实测圆度在0.94左右比正面光整整高出一截。曝光时间也有讲究。原则是目标边缘的灰度过渡越陡越好最好控制在1到2个像素以内。如果曝光太长亮背景会溢出并往暗区域渗边缘一圈都会被吃掉曝光太短灰度差不足内部会出现孔洞。我调试时会盯住直方图让目标灰度峰值和背景灰度峰值分得足够开。3.2 参数设置一步步推导我把这套例程里的一版典型参数拿出来做一个完整推演方便你理解每个数字是怎么来的。用的是500万像素黑白相机视野大约40毫米乘30毫米目标是一个直径5毫米左右的圆形工件视野里同一时刻会出现三到五个这样的圆还混着两个矩形螺丝。第一步图像预处理。中值滤波核选3x3目的是去掉离散噪点接着高斯平滑核选5x5进一步稳定边缘。第二步阈值分割。直接用大津法做全局自适应阈值没有手工填固定值。为什么敢用全局大津因为背光环境光强稳定目标灰度和背景灰度分布都很集中全局阈值完全够用。如果用正面光且有渐变阴影就得考虑局部阈值但运算量更大所以优先从光源上解决问题。第三步BLOB分析参数。等效直径目标大约5毫米按视野和分辨率换算大约200像素直径折算面积大约31400像素平方。我给面积范围设置为12000到50000把直径大约80到250像素的区域都圈进来。为什么要放宽因为生产来料尺寸有公差视野一致性也有波动收得太紧会把边缘有遮挡的目标误杀。圆度下限设为0.85因为背光下标准工件的实测圆度在0.91到0.95之间矩形螺丝圆度只有0.7出头0.85一刀切下去螺丝全部滤除圆工件稳定保留。这里有个容易忽略的细节如果工件边缘有小缺口圆度会明显下降。这时候可以先做一次闭运算把边缘小缺口补上圆度就回上来了。不过闭运算也会略微改变区域周长参数上要观察不能把两个圆磨成一个圆。第四步输出重心和拟合圆心。每个BLOB区域同时计算质心和最小二乘拟合圆心我最终默认输出拟合圆心质心只用于目标排序和关联。3.3 坐标标定从像素跳到物理坐标BLOB分析算出来的坐标是像素坐标运动机构不认像素它认毫米或者脉冲数。中间的桥梁就是标定。最常用的方法是放射变换标定。简单理解就是找像素坐标系和运动坐标系之间的数学映射关系至少需要三个点解出六个参数实际工程为了稳定会用到九个点。操作方式不复杂让运动机构带着一个标准圆靶或者工件分别走到九个已知位置每到一个位置就采一次图记录下当时图像里目标圆心的像素坐标以及运动机构实际的物理坐标然后用这些对应点解出变换矩阵。只要机构重复精度没问题这套标定做下来视觉输出的坐标精度可以跟机构自身精度对齐。标定时还要注意旋转和镜像的问题。如果相机安装方向和运动轴方向存在一个夹角变换矩阵会自动吸收掉这个夹角但很容易忽略的是图像坐标系的Y轴方向和运动坐标系的Y轴方向是否一致。工业相机的像素坐标系原点一般在左上角Y轴向下而运动坐标系Y轴通常向上如果不处理补偿方向是反的机构越走越偏。所以标定完之后一定要做一个方向验证视觉输出正X偏移机构朝正X方向走看到实际位移和预期一致才叫标定完成。3.4 坐标输出与运动补偿联动标定完成后视觉坐标就可以直接送给运动逻辑了。多圆定位联动运动的典型逻辑是视觉算出当前工件的圆心坐标和基准位置的偏差把偏差值发给伺服做位置补偿然后机构执行对位动作。以两圆定位为例。基准位置有两个圆标准情况下它们的圆心分别在某物理坐标值上。当前来料位置有偏移BLOB分析算出当前两个圆心坐标后先计算第一个圆心的X/Y偏差再计算两个圆心连线的角度相对基准角度的偏差。X/Y偏差直接补偿到运动轴角度偏差补偿到旋转轴。三个量同步发出机构就能把任意摆放的工件纠正到固定姿态上这个过程通常叫“取放对位”。一体机在这里的优势体现得很明显视觉结果算完不用走网络直接内部变量赋值到运动缓冲下一拍就能执行补偿。整套流程从采图到运动启动我在例程里测出大约25毫秒以内完全满足产线节拍。4. 常见问题与排查技巧实录4.1 BLOB断裂和孔洞现象很典型一个完整的圆在二值化之后变成了月牙形甚至碎成好几块BLOB分析把它们当成几个独立目标面积筛选直接失败。原因大多是目标表面反光。金属圆片在打光时产生镜面反射局部灰度特别高或特别低阈值分割时把那一块整个切掉了。处理顺序我建议先动成像再动算法。把光源角度调低或者换成偏振片消除镜面反射问题通常直接消失。如果现场不允许动光源就用形态学闭运算把断裂的区域缝合核大小从3x3开始试够用就行用太大核会把相邻目标合并得不偿失。BLOB分析里的“填充孔洞”选项也要打开它会把区域内部的小空洞补上对提高圆度数值帮助很大。4.2 多个圆靠太近导致粘连两个圆间距很近或者工件表面有脏污把两个圆连在了一起二值化后变一个BLOB面积筛选也救不回来。我的排查步骤是先看二值化图像确认粘连原因。如果是脏污搭桥调阈值往往能断开如果两个圆物理上就挨得近阈值会把中间缝隙也变成白色这时候可以试试面积筛选先把超大BLOB排除再做一次基于距离的分割。更实用的办法是做分水岭分割或者直接改用“基于区域重心聚类”的思路先不追求把粘连区域分开而是把它当成一个粗区域在粗区域内部用边缘检测找圆弧分段拟合出多个圆心。我的实际经验是如果产品设计允许最好在成像时把两个圆的间距尽量拉开视觉层面怎么补都不如物理层面解决来得稳。4.3 圆心位置抖动现象是目标不动算法输出的圆心总有正负一两个像素的波动。这种情况最常见的原因是曝光或光源不稳导致二值化边缘来回变化圆拟合的边界点也随之抖动。对策从两头入手。硬件上把光源电源换成恒流驱动亮度波动会明显减少软件上可以做多次采集平均比如连续采三帧对圆心结果取平均但这样会牺牲节拍好在大部分场景帧率足够三帧平均的耗时可以接受。另一个容易被忽视的点是边缘提取方式如果用亚像素边缘检测代替整像素边缘点圆拟合的稳定性会提高不少。整套例程实测下来把光源稳定性和亚像素边缘做好之后圆心重复性从正负1.2像素改善到正负0.15像素效果非常明显。4.4 标定之后仍然有位置偏差标定矩阵算对了但实际补偿时总是有一定角度的残余偏差。这种情况十有八九是标定用的特征点和实际抓取的目标不在同一个Z高度。视觉是二维投影目标高度变化会导致视差圆心的图像位置会随着高度偏移。你在标定时如果用的是一片薄靶实际干活时工件高了5毫米这个高度差就会转化为测量误差。解决方式是让标定时的Z轴高度跟实际作业高度尽量一致。如果平时来料高度波动大就需要做高度方向的补偿模型或者增加第三个维度做三维视觉。对于多数平面定位场景把标定高度固定住基本就够用了。4.5 现场问题速查表现象直接原因处理方向圆变成月牙或碎片镜面反光导致局部灰度异常调整光源角度、加偏振片、开闭运算多个圆粘连成一个BLOB间距过近或脏污搭桥调阈值、分水岭分割、ROI内做边缘拟合圆心抖动超过1像素光源波动、边缘非亚像素换恒流光源、亚像素边缘、多帧平均标定后仍有角度偏差标定平面与作业平面高度不一致统一Z高度重新标定圆度值始终偏低边缘毛刺、内部孔洞中值滤波、闭运算、填充孔洞目标照不全ROI边界切掉目标扩大ROI保留安全边界这个表是我日常调试用的排查索引照着这个方向走大多数BLOB多圆定位问题都能在半小时内定位到根因。不用死记调得多了自然形成直觉。做这套例程最大的体会是BLOB分析这些算法本身并不玄妙真正拉开差距的是对成像原理的理解和对参数的敬畏。每个数字背后都对应着一个物理过程哪怕只是把阈值从固定值改成自适应现场稳定性就能上一个台阶。如果你手头正好有类似的圆形定位需求建议按这个例程完整的流程走一遍在调试到二值化那一步时多花点时间看看图像效果你已经成功了一半。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑