基于BLOB分析的多圆视觉定位:从圆心坐标到运动控制标定全链路

发布时间:2026/10/17 18:08:46
基于BLOB分析的多圆视觉定位:从圆心坐标到运动控制标定全链路 做视觉定位的工程师大多经历过这种时刻画面里圆形目标清清楚楚算法也输出了圆心坐标可机械手抓过去就是偏那么零点几个毫米。多圆定位听起来只是“找个圆”的问题真正跑起来你才发现它横跨了图像处理、坐标标定和运动控制三个环节任何一个环节掉链子视觉结果都是废的。这是机器视觉运动控制一体机应用例程的第三篇上一篇我们聊过图像采集与通信框架搭建这一篇进入最常见的生产需求之一基于BLOB分析的多圆定位。适合正在做基准点定位、圆形零件抓取、孔位对位、Mark点识别的工程师参考。我会把算法选型、坐标系标定、BLOB参数设计、现场排坑整个链路捋一遍文章里用到的项目代号就是“模拟项目X”是我在一条装配线上实际跑过的场景你可以照着复现也可以拿里面的思路去推演自己的需求。1. 多圆定位到底在定位什么两类需求对应两种输出1.1 基准类定位与测量类定位先分清同样是找圆产线需求可以完全不一样。我在模拟项目X里遇到的是第一种一台装配设备需要抓取一片带有9个圆形定位孔的钣金件机械手要根据孔心坐标调整抓取姿态。这种属于基准类定位核心输出是“圆心”目的是给运动控制提供目标位置精度要求往往到0.05mm甚至更高。第二种是测量类定位例如检测一批圆盖的直径是否超差、圆度是否合格。这种需求当然也要找圆但输出的是几何尺寸重点在重复测量稳定性对绝对坐标的精度要求相对低一些。现实里很多工程师把这两种混在一起用一套流程打天下结果基准定位的项目抱怨“视觉不准”实际是输出维度选错了。做多圆定位之前先把这两类需求分开后续参数设计完全不同。基准类必须走完标定链路输出机械坐标测量类则要重视像素当量校正和亚像素边缘精度。1.2 精度指标重复精度、绝对精度和动态精度多圆定位的项目验收绕不开三个精度概念。重复精度是同样条件下反复拍50次圆心输出的离散程度它反映算法稳定性绝对精度是视觉给出的坐标和真实机械坐标之间的偏差它反映标定质量动态精度是机构运动过程中或振动环境下抓拍的结果偏差它反映曝光时间和硬件同步水平。模拟项目X验收时要求重复精度±0.02mm绝对精度±0.05mm。这个目标怎么判断能不能达到先算一笔账视野宽度约100mm500万像素相机横向分辨率约2448像素那么每个像素对应的物理尺寸大约是100/2448≈0.041mm。质心算法通常能做到亚像素级稳定性按0.1像素波动算就是0.004mm重复精度有富余。但绝对精度受标定板、标定算法、机械误差影响0.05mm需要九点标定再加上机构背隙补偿才悬着够。先算像素当量再定指标这是所有视觉定位项目的第一条经验。2. 算法选型为什么这种场景要押注BLOB分析2.1 BLOB分析的基本逻辑连通域即目标BLOB分析全称是Binary Large Object分析。简单说一幅灰度图经过二值化后像素值只有0和255两种其中相邻且像素值相同的区域连成一片这一片就是一个BLOB。BLOB分析要做的事情就是把图像里这些连通的区域找出来然后计算每个区域的特征包括面积、周长、质心、外接矩形、圆度、长轴短轴等。可以说BLOB是这个任务里最直接的“找目标”方法。它不关心目标内部有没有纹理不关心边缘是不是绝对平滑只要目标和背景在灰度上有区分它就能把区域拖出来。在圆形定位场景中BLOB天然给出区域的质心坐标这对标准圆来说就等于圆心。更重要的是BLOB的参数全部有物理含义面积筛选可以滤掉灰尘和噪点圆度筛选可以排除长条状和方形的干扰物工程师不用靠玄学调参。2.2 BLOB、模板匹配、霍夫圆检测的取舍很多初学者一上来就选模板匹配因为“找圆嘛匹配一个圆的形状不就行”。但在实际产线里模板匹配在这种高对称目标面前反而吃亏。圆形目标旋转不变模板匹配在圆上任何角度得分都一样多圆密集排列时相似目标之间会互相干扰匹配得分区分度很低匹配位置还可能被旁边的圆“拽”走。模板匹配适合带纹理、有方向特征的异形目标不适合圆形基准点。霍夫圆检测是另一个常见选项。它的思路是把边缘点映射到参数空间找累加峰值原理很巧妙但参数敏感——累加器阈值、半径范围、梯度阈值都要调光照稍微波动检测出的半径就漂移。而且霍夫圆检测给的是拟合外接圆对遮挡、光照不均的鲁棒性远不如BLOB加最小二乘拟合圆。我的选择是先用BLOB做候选区域筛选再用轮廓上的边缘点做最小二乘圆拟合最后输出拟合圆心。这样既有BLOB处理速度快、物理参数直观的优点又有拟合圆对局部边缘缺损不敏感的长处。模拟项目X里一张500万像素灰度图从采集到输出9个圆心的总耗时大约18msBLOB阶段占了大头但依然在毫秒级一体机内的处理性能完全跑得动。算法选型对比可以简单汇总成一张表算法方案抗光照变化能力多目标密集适应性参数直观性单次耗时500万像素BLOB轮廓拟合圆较高好天然按区域区分高面积/圆度可解释15~20ms模板匹配一般光照变化影响得分差相似目标互相干扰中相似度阈值偏玄学30~80ms霍夫圆检测较低半径随亮度漂移一般累加器容易误检低参数多且关联20~50ms3. 一体机里的坐标系链路像素坐标如何变成轴运动3.1 九点标定把像素坐标换算成机械坐标BLOB分析输出的坐标默认是像素坐标原点在图像左上角单位是像素。机械手要用的坐标是机械坐标原点在设备零点单位是毫米。两个坐标系之间存在平移、旋转和缩放关系解决的常规方案就是九点标定。九点标定的思路不复杂让机械手带着一个已知尺寸的标记物在相机视野内走9个均匀分布的位置。每个位置记录两组数据一组是机械手反馈的机械坐标一组是视觉系统检测到的标记物像素坐标。9个点能列出18个方程用最小二乘解出3×3仿射变换矩阵的6个自由度平移2个、旋转1个、缩放2个、倾斜2个中实际常用部分。之后任意一个像素坐标乘上这个矩阵就得到对应的机械坐标。在机器视觉运动控制一体机里这套流程通常会做成“标定向导”但向导只是帮你采集点真正决定精度的是操作细节。我标定模拟项目X时踩过一次坑标定板没有完全贴平治具表面四角有0.2mm的翘起。结果视野中心的点标得很准视野边缘的点差到0.3mm以上。后来重新装夹用百分表打了平面度误差立刻降到0.05mm以内。标定平面和被测量物体的平面不在同一高度是绝对精度做不上去的一大隐形原因。3.2 旋转中心的必要补充如果项目里的机械手带旋转轴多圆定位还会多一个坐标系问题视觉给出的是目标在固定相机下的坐标但机械手抓取时绕自身旋转中心转动如果旋转中心和视觉标定的原点不重合旋转角度一变化位置就会偏。需要在标定之外再补一步旋转中心标定。具体做法是让旋转轴带着标记物转多个角度视觉记录每个角度下标记物的像素坐标这些坐标画出来是一个圆圆心就是旋转中心在像素坐标下的位置。这一步经常被新人忽略但凡是“吸取后还要转个角度贴合”的项目不做旋转中心标定贴出来的角度误差能直接用眼睛看出来。模拟项目X的钣金件抓取没有旋转需求我只做了平移标定但我在另一个圆形盖子贴合项目里补过旋转中心标定偏移量从0.4mm降到0.03mm改善非常明显。做视觉定位项目坐标系链路永远是第一优先级。4. BLOB多圆定位的完整参数设计与处理流程4.1 图像预处理先保边缘再保灰度拿到一张灰度图不要急着二值化。圆形目标的边缘质量直接影响圆度计算和拟合精度。我常用的预处理顺序是这样先做一次中值滤波窗口3×3目的是去掉传感器噪点和细小的灰尘暗点如果现场光照偏暗、对比度不足再做一次对比度线性拉伸把目标灰度和背景灰度的差距拉开。这里要特别注意一个顺序问题先滤波、后增强。顺序反过来的话增强操作会把噪点一并放大后面BLOB筛选时小噪点可能接近小圆目标的面积干扰筛选。模拟项目X最初就因为省了滤波步骤二值图里多了几十个碎点面积下限不得不往上抬结果一个真实的小定位孔差点被滤掉。滤波这一步看着不起眼却是稳定性的基础。4.2 阈值分割固定阈值还是自动阈值二值化是把灰度图变成BLOB分析能处理的二值图核心是选阈值。固定阈值最简单设成120就是大于120全变白小于120全变黑。现场如果恒定光照固定阈值完全够用但如果环境光有波动或者目标表面本身有明暗差异固定阈值会导致同一物理目标分割出来的面积忽大忽小圆心位置也跟着抖。模拟项目X的产线有顶部照明但相邻工位的设备偶尔会反光到料区所以我没有用固定阈值改用OTSU自动阈值。OTSU的思路是自动找一个阈值让分割出来的前景和背景两类的类间方差最大它在大多数灰度分布呈双峰的场景下表现稳定。OTSU不需要人为设定每次采集自动计算抗光照波动的能力比固定阈值强不少。如果现场再恶劣一些比如环形光不均匀、目标灰度变化大那就要上局部自适应阈值了它按每个像素周边区域的灰度来决定该点属于前景还是背景。代价是计算量更大而且参数里块大小和偏移量需要重新调。优先尝试顺序是固定阈值→OTSU→局部自适应阈值不要一上来就上最重的方案。4.3 形态学处理闭运算和开运算怎么用二值化之后图像上经常有零星的洞和毛刺。圆形钣金件表面如果有轻微油污或者反光点二值图里圆的内部会多出几个黑洞背景如果有杂质二值图里会多出几个白点。两类问题分别用两类形态学操作处理先做闭运算填洞再做开运算去孤立点。闭运算是先膨胀再腐蚀能把圆内部的小黑洞填上开运算是先腐蚀再膨胀能去掉背景里的小白点。核的大小不建议用大结构元素我通常用3×3或5×5。核越大边缘位置偏移越明显圆度值也会被磨平反而影响后续判断。模拟项目X里有个30mm直径的圆孔用5×5闭运算后面积增加约0.5%质心位置没有可测偏移这个量级可以接受换成9×9核边缘就有肉眼可见的圆角化圆心偏移达到0.2像素肯定不行。形态学操作要“够用就好”。4.4 特征筛选与多圆排序从一堆BLOB里挑出要的圆预处理完成之后BLOB分析会输出若干个连通域。多圆定位的最后一步就是从这些候选区域里筛出真正的目标圆并确定输出顺序。筛选条件按优先级排是这样第一面积区间。每个目标圆在像素当量下都有一个理论面积例如直径30mm的圆像素当量0.04mm/像素半径375像素理论面积约44万像素。设一个面积下限和上限比如理论值的70%~130%把灰尘、碎屑、大块杂物全部滤掉。第二圆度下限。圆度的经典计算是4π×面积除以周长平方正圆等于1越接近1越圆。把圆度下限设为0.8可以把方形、长条形区域排掉。第三位置ROI。如果工件固定的区域里有其他圆形结构干扰可以画一个兴趣区域只允许在兴趣区域内选择目标这一步通常结合工件基准边缘做。第四目标数量校验。如果筛选完的数量不等于预先设定的9个立即报错并停止取料避免少抓、漏抓。多圆排序也要有明确规则。机械手抓取是按固定顺序进行的视觉输出必须按这个顺序排列坐标。我习惯按Y坐标排序分多行再按X坐标在行内从左到右排列这样把图像里识别出的圆形位置和机械手期望的抓取顺序一一对应。排序逻辑不对哪怕圆心坐标全是准的设备依然会乱抓。下面是一份模拟项目X中BLOB筛选参数的配置示意你可以按自己的视场宽度等比缩放筛选项参数值说明面积下限300000像素滤除直径约15mm以下的小圆和噪点面积上限550000像素滤除大块反光区域圆度下限0.80偏方、偏长的区域全部排除距离最近邻大于80像素防止粘连的两个圆被认成一个BLOB目标数量9个数量不对直接抛错4.5 从BLOB质心到拟合圆心精度的最后一步提升BLOB分析直接输出的质心是二值区域的几何重心。标准圆没有缺损时质心等于圆心但一旦圆的边缘被遮挡、反光缺角或者二值化后少了半边质心就会明显偏移。模拟项目X的工件上有一个孔位靠近加强筋反光导致该圆边缘有一小段轮廓断开BLOB质心偏移了约0.3像素换算成物理尺寸约0.012mm单看可能不严重但在多工序累计后就可能超差。所以我的最终方案是先用BLOB筛出候选区域然后提取每个候选区域的轮廓点集用最小二乘法拟合出圆的方程输出拟合得到的圆心和半径。这个方法比直接用质心多花大约2ms但对边缘缺损的鲁棒性高很多。如果你的项目里圆的完整性很好直接输出质心没问题如果和我一样存在反光、遮挡、缺角的情况一定把“质心”和“拟合圆心”当成两码事来对待。5. 实测数据与连续运行稳定性分析5.1 模拟项目X的测试结果模拟项目X在完成标定和算法调试后我做了两组测试。第一组是静态重复性测试工件固定不动连续采集100次每次都能检测到9个圆记录每个圆心的像素坐标波动。结果所有圆心在X方向的标准差不超过0.05像素Y方向不超过0.06像素折合物理尺寸约0.0024mm。这说明算法本身的稳定性余量很大。第二组是模拟抓取测试让机械手按视觉输出的坐标轨迹走50次每次都先用视觉定位再用激光位移传感器复核机械手实际到达位置偏差折算后平均值在0.03mm左右最大0.05mm。这个结果说明绝对精度的瓶颈不在视觉算法而在标定和机械本身。视觉只要稳定做到像素级以下剩下的要靠机械装配和标定质量。5.2 连续运行中发现的意外波动模拟项目X初期连续运行了两个小时后我发现其中两个圆的圆心坐标整体偏移了0.1像素左右虽然没超差但趋势让人警觉。排查后发现是相机支架的锁紧螺丝在设备振动下有轻微松动。这是非常经典的问题视觉算法调得再稳相机一松动全白搭。处理办法分两步机械上把所有相机支架的螺丝换成带防松垫圈的型号并标注扭矩值程序上加一个开机自检逻辑每次上电后拍摄固定标记物把质心坐标和上次标定时的基准值做比对偏差超过0.2像素就报警提示重新校准。这个自检逻辑是纯软件成本但能避免“跑了一上午才发现精度漂移”的尴尬局面。强烈建议每个视觉定位项目都做。5.3 曝光时间与运动采集的联动模拟项目X后期调试又遇到一个问题为了配合产线节拍视觉需要在机械手平移过程中拍照结果图像出现轻微运动模糊圆的边缘被拉出一小段拖影圆度值从0.9掉到0.75部分圆差点被筛掉。这不是算法问题是曝光时间不够短。解决方向有两个一是缩短曝光时间到1ms以内前提是把光源亮度提上去二是做“飞拍”利用编码器或IO信号触发相机在机构到达固定位置瞬间抓拍让图像等效静止。一体机在这类场景的优势是视觉和运动控制同步在一个控制器里触发延迟可以压缩到微秒级。普通分体式方案视觉控制器和运动控制器各管一套触发线一走长延迟就上来了。最后我用的方案是曝光0.8ms加光源功率提升运动模糊彻底消失圆度稳定在0.90以上。运动过程中拍照的项目优先解决模糊而不是去调圆度阈值。6. 现场调试中几个容易忽略的硬坑6.1 质心不是圆心二值区域的几何中心与真实圆心的偏差这是我在多个项目里反复强调的问题。BLOB分析输出的“中心”严格说是二值区域的质心只有当区域形状是完美圆形或对称图形时质心才和几何圆心重合。现实产线中目标边缘可能被遮挡、可能反光少一块、可能油污多一块任何不对称都会让质心偏移。处理办法就是我前面说的BLOB筛候选、轮廓做拟合圆、采用拟合圆心。不能用“反正BLOB给了质心”就草率输出。模拟项目X在切换到拟合圆输出后圆度筛选阈值从0.7上升到0.85漏检率下降质检直通率也提升了。记住BLOB是过滤器拟合才是精度的落实点。6.2 光照变化会让圆度值“飘”连续生产车间里光照并不是恒定的。相邻设备检修时可能把灯关掉头顶日光灯会老化工件表面膜层颜色可能有批次差异。这些都会改变二值化后的区域形状圆度值随之波动。如果圆度下限卡得很死比如设0.95正常光照下没问题光照一变圆度掉到0.93真圆就被误杀了。我的做法是把圆度下限放宽到0.8把安全余量留给环境波动同时用面积和ROI条件做主力筛选因为面积比圆度对外界光照变化的敏感度更低。如果项目必须严格筛圆度建议做一次多光照条件下的数据采集用统计结果定阈值而不是在设备旁拍几张图就定。6.3 标定板与被测物没有贴平高精度定位的隐形杀手前面提到了平面度问题这里再展开讲一下为什么影响这么大。九点标定求解的仿射变换隐含的假设是标定板上所有标记点都在同一个平面上被测物也在这个平面上。如果标定板翘起一角或者被测物底面本身不平像素到机械坐标的映射就会按高度产生误差。现场判断方法很简单标定完成后把机械手移到视野内3个不同角落的已知位置让视觉定位看偏差方向是不是和标定板翘起方向一致。如果是重新装夹标定板保证平面度在0.02mm以内。这个步骤看着小但在0.05mm级别精度的项目里占比非常大。6.4 视觉处理与运动控制不能“各走各的”最后说一个流程层面的坑。很多项目里视觉部分处理完之后坐标是放进一个中间变量运动控制再去读。如果视觉程序循环和运动控制程序循环没有同步机制机械手可能读到上一次的旧坐标导致抓空或撞料。一体机的价值就在于视觉和运动在同构环境下运行可以很方便地做信号握手视觉处理完成置一个“定位完成”位运动控制读到该位置后开始运动同时清除该位如果超时未读视觉侧报警。异步处理导致的偶发性错误是定位项目里最难排查的一类问题因为它不是每次都发生是“偶尔”。加一个简单的握手信号这类问题就能从根上断掉。我在模拟项目X里就遇到过两次抓空最后排查到是程序里坐标变量被重复赋值视觉输出还没更新运动控制就已经启动。改成信号握手之后再没出现过同类问题。最后再分享一个小经验多圆定位项目调通后一定要保留一组“金样本”也就是在不同光照、不同角度下采集的正常与异常图像。后续设备稳定性测试或者客户质疑精度时拿这组金样本重跑一遍算法能快速定位到底是环境变化还是算法退化。模拟项目X的这组金样本后来帮了大忙一次客户现场验收前突然出现2个圆误检我用金样本离线重放了一遍发现是当批工件表面覆膜反光导致的二值化孔洞当场加了一步闭运算处理问题解决没有耽误产线验收。这个习惯建议所有视觉项目都保留。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询