ARTICLE · 1055798
机器视觉传统算法实战:亚像素、模板匹配、Blob分析、几何拟合与标定校正全解析
传统算法不是“过时”,在尺寸测量、定位引导、有无检测等结构化任务中,它比深度学习更稳定、更快、更可解释。
这篇文章把传统算法拆成五个核心模块,每个模块只讲最关键的选型逻辑和最容易踩的坑。

一、亚像素边缘提取:精度从像素级到0.1像素
为什么需要亚像素?
像素级边缘检测(Sobel、Prewitt)只能将边缘定位到整数像素坐标。以2448×2048分辨率、10mm视野为例,单像素等效物理尺寸约4.08μm。如果边缘定位精度只能做到1个像素,理论测量精度就是4μm级别。
亚像素算子将定位精度推进到0.1像素甚至0.05像素,等效物理精度达到0.41μm甚至更低。
核心算子选型
edges_sub_pix:最通用的亚像素边缘提取算子,基于Canny算法的改进版本,通过高斯导数滤波器实现亚像素级边缘定位。在金属零件尺寸测量中,重复测量标准差可稳定在0.3μm级别。
lines_gauss:基于Steger算法的线条中心提取,中心线坐标具有约0.05~0.1像素的重复精度,广泛用于激光条纹中心提取、细线检测。
常见坑
坑一:以为用了亚像素就能做到亚微米精度。 算法精度的天花板由物理系统决定——相机分辨率不够、镜头畸变过大、机械振动,这些物理限制会直接吃掉算法精度。
坑二:参数选取不当。 高斯导数滤波器的Sigma值决定了边缘提取的尺度和灵敏度。Sigma过小,噪声被放大;Sigma过大,边缘被平滑。
选型建议:先确认物理系统的精度上限,再选择匹配的算法精度。物理系统达不到的精度,算法再强也没用。
二、模板匹配:基于形状的匹配
与灰度匹配的本质区别
传统灰度匹配(NCC/SAD)基于像素灰度值比对,只能精确到像素等级,且对光照变化敏感。
基于形状的匹配(find_shape_model)采用几何边缘特征——训练阶段提取标准物的边缘轮廓,执行阶段对检测图像提取边缘特征,用几何关系计算最佳匹配位置。这带来了四个关键优势:
任意角度旋转:直接支持360°旋转
缩放容忍:无需重新训练模板
抗光照变化:基于边缘特征而非灰度值
部分遮挡容忍:即使目标被部分遮挡,仍能完成定位
关键参数
角度范围:限制搜索角度可以大幅提升速度。如果工件来料方向固定,将角度范围限制在±10°以内。
缩放范围:根据产品公差设定,不要盲目开大。
对比度:决定哪些边缘被纳入匹配。对比度太低,噪声边缘干扰;对比度太高,真实边缘被遗漏。
金字塔层数:层数越多,搜索越快,但精度下降。通常设置为自动。
常见坑
坑一:模板质量差。 模板图像模糊、光照不均、背景杂乱,会导致匹配率低。训练模板时要用清晰、光照均匀、背景干净的标准件图像。
坑二:搜索范围过大。 全图搜索、全角度搜索,速度慢且容易误匹配。先用ROI缩小搜索区域,再限制角度范围。
三、Blob分析:连通域提取与筛选
标准流程
阈值分割 → 连通域提取 → 特征筛选 → 输出结果
阈值分割:将图像二值化,分离目标与背景。自动阈值(如Otsu、max_separability)适合光照均匀的场景;手动阈值适合对比度稳定的场景。
连通域提取:将二值图像中相邻的像素合并为独立区域(Blob)。
特征筛选:根据面积、圆度、矩形度、凸性、长宽比等特征过滤掉噪声和无关区域。
常用特征
面积:过滤掉过小或过大的区域
圆度:区分圆形缺陷与线性划痕
矩形度:判断区域是否接近矩形
凸性:检测区域是否有凹陷或凸起
长宽比:区分细长缺陷与块状缺陷
常见坑
坑一:阈值选取不当。 阈值过高,目标区域被分割成碎片;阈值过低,目标与背景粘连。自动阈值不是万能的,光照不均时仍需手动调整。
坑二:粘连区域未分离。 多个目标连在一起时,需要先做形态学腐蚀或分水岭分割,再做Blob分析。
坑三:噪声未过滤。 二值化后残留的小噪点会干扰Blob统计。先做开运算或中值滤波。
四、几何拟合:直线、圆、椭圆的亚像素拟合
核心算子
fit_line_contour_xld:对XLD轮廓进行直线拟合,输出直线的起点、终点、法向量。
fit_circle_contour_xld:对XLD轮廓进行圆拟合,输出圆心坐标和半径。
fit_ellipse_contour_xld:对XLD轮廓进行椭圆拟合,输出椭圆中心、长短轴、旋转角度。
拟合算法选型
最小二乘法:适合轮廓点噪声小、无异常点的场景。
RANSAC:适合存在大量异常点(如毛刺、缺口)的场景,通过随机采样迭代找到最优模型。
Huber:介于两者之间,对中等程度的异常点有较好的鲁棒性。
常见坑
坑一:轮廓点选取不当。 拟合前需要先筛选轮廓点,剔除明显偏离的异常点。可以用轮廓长度、曲率等特征过滤。
坑二:拟合区域不完整。 如果只取圆弧的一小段做圆拟合,圆心位置会非常不稳定。圆弧覆盖角度越大,拟合越可靠。
五、标定与畸变校正
标定三要素
内参:焦距、主点坐标、像素尺寸。决定相机自身的成像特性。
外参:相机坐标系与物理坐标系之间的旋转和平移关系。决定像素坐标到物理坐标的映射。
畸变系数:径向畸变(k1、k2、k3)和切向畸变(p1、p2)。决定图像边缘的变形程度。
标定流程
准备标定板(棋盘格或圆点标定板)
采集不同姿态的标定图像(建议15-20张)
提取角点或圆心坐标
计算内参、外参、畸变系数
验证重投影误差——应控制在一个像素以内,超了重拍。
标定板要求
精度应至少为目标测量精度的5倍
使用低热膨胀系数材料(钢化玻璃或铝氮陶瓷),避免温度变化导致尺寸漂移
表面翘曲应小于0.05mm
常见坑
坑一:标定板覆盖范围不足。 标定图像只集中在视野中心,边缘畸变系数拟合不准。标定板必须覆盖视野的左上、右上、左下、右下、中心全区域。
坑二:忽略温度影响。 标定板热胀冷缩会导致尺寸漂移,标定环境温度应与工作环境一致。
坑三:畸变校正的时机。 如果项目只做有无检测、不涉及尺寸测量,畸变校正可以省略。但如果涉及尺寸测量、定位引导,畸变校正是必须的。
传统算法是机器视觉的基本功。
亚像素边缘提取决定测量精度上限,模板匹配决定定位稳定性,Blob分析决定缺陷检出能力,几何拟合决定测量重复性,标定与畸变校正决定像素到物理坐标的映射精度。
这五个模块做到位,结构化检测任务基本都能搞定。深度学习不是替代传统算法,而是在传统算法搞不定的场景中做补充。
关注我,后续按模块逐一拆解,每个模块给出更详细的实战方法和避坑指南。