4. 机器视觉基础

Delta机器人视觉分拣系统的第一个技术关口,是让机器人“看见”并“读懂”传送带上的目标物体。这一章的内容是整个视觉系统的地基——如果图像采集环节引入噪声、坐标系标定混乱、颜色空间选择错误或预处理参数不当,后续的定位、识别与抓取精度都会大打折扣。本章将围绕图像从“物理世界”到“数字矩阵”的完整链路,拆解四个核心模块:图像采集的硬件与触发机制、像素与坐标系的数学基础、颜色空间的转换逻辑,以及灰度化、滤波、二值化三大预处理操作。理解这些概念,是后续进行手眼标定、特征提取和抓取规划的前提。

图像采集与预处理工程链路图 物理世界 目标物体/传送带 环境光/遮挡 相机与镜头 分辨率/曝光/增益 焦距/光圈/畸变 图像传感器 CMOS/CCD 像素阵列/ADC 数字图像矩阵 宽×高×通道 灰度值0-255 坐标系定义 像素坐标系 (u,v) → 图像坐标系 (x,y) 相机坐标系 (Xc,Yc,Zc) → 世界坐标系 (Xw,Yw,Zw) 内参/外参/畸变系数 颜色空间 RGB:红绿蓝三通道 HSV:色调/饱和度/明度 灰度:单通道亮度信息 图像预处理 灰度化:加权平均法 滤波:高斯/中值去噪 二值化:OTSU/固定阈值 输出:二值化图像 + 轮廓信息 用于后续Blob分析、特征提取、坐标计算 供Delta机器人抓取定位使用

上图展示了从物理世界到数字图像矩阵的完整链路,以及坐标系、颜色空间和预处理三大核心模块在其中的位置。下面我们逐一深入每个模块的工程细节。

4.1 图像采集:从光信号到数字矩阵

核心原理

图像采集的本质是将三维物理世界的光信号转换为二维数字矩阵。在Delta机器人分拣场景中,通常采用工业面阵相机或线阵相机。面阵相机一次曝光获取整幅图像,适合静态或低速运动目标;线阵相机逐行扫描,适合高速运动的连续物体。相机内部的核心是CMOS或CCD图像传感器,它由数百万个感光像素单元组成,每个像素将光强度转换为电压信号,再经ADC(模数转换器)量化为数字值。对于彩色相机,每个像素通过Bayer滤色阵列(RGGB模式)只采集红、绿、蓝中的一个通道,再通过插值算法恢复完整RGB图像。

关键参数与选型判断

参数说明分拣场景建议
分辨率像素阵列的宽×高200万~500万像素(1600×1200以上)
帧率每秒采集帧数(FPS)≥30FPS,配合运动控制
曝光时间传感器感光时长0.1~5ms,避免运动模糊
增益信号放大倍数尽量低,增益过高引入噪声
接口GigE / USB3.0 / Camera LinkGigE适合远距离,USB3.0适合短距离

触发模式与实战场景

在Delta机器人分拣线上,相机不能自由运行,必须与传送带编码器或光电传感器联动。常见的触发模式有两种:硬件触发——光电传感器检测到物体到达指定位置时,向相机发送TTL脉冲信号,相机立即曝光;软件触发——上位机通过以太网或USB发送指令控制相机采集。硬件触发延迟低(微秒级),适合高速分拣;软件触发灵活,适合低速或实验场景。

实战案例:某食品包装线使用GigE接口的500万像素相机,传送带速度0.5m/s,物体最小尺寸10mm。初始使用软件触发,发现物体位置偏差达±15mm。分析后改为光电传感器硬件触发,曝光时间设为0.8ms,帧率提升至40FPS,位置偏差降至±2mm以内。关键调整是触发延迟从软件约30ms降至硬件约0.1ms,同时曝光时间缩短减少了运动模糊。

常见误区:盲目追求高分辨率。分辨率越高,数据量越大,处理时间越长,且对镜头和光源要求更高。分拣场景应优先保证视野覆盖和精度匹配,而非一味堆像素。

4.2 像素与坐标系:从图像到空间的桥梁

核心原理

图像在计算机中是一个二维数组,每个元素称为像素(Pixel)。像素坐标系以图像左上角为原点,u轴向右,v轴向下,单位是像素。但像素坐标无法直接用于机器人控制,必须转换到物理单位。转换链路为:像素坐标(u,v) → 图像坐标(x,y) → 相机坐标(Xc,Yc,Zc) → 世界坐标(Xw,Yw,Zw)。其中,图像坐标以光轴与图像平面的交点为原点,单位是毫米;相机坐标以相机光心为原点;世界坐标是机器人基座标系或传送带坐标系。

内参与外参

相机内参描述像素坐标与图像坐标的关系,包括焦距f、主点坐标(cx,cy)和畸变系数(k1,k2,p1,p2)。外参描述相机坐标系与世界坐标系的旋转矩阵R和平移向量T。标定就是求解这些参数的过程。对于Delta机器人,通常使用棋盘格标定板,拍摄10~20张不同角度的图像,通过OpenCV的calibrateCamera()函数计算内参和外参。

// 标定核心代码示意(C++ / OpenCV)
vector<vector<Point3f>> objectPoints;
vector<vector<Point2f>> imagePoints;
Mat cameraMatrix, distCoeffs;
vector<Mat> rvecs, tvecs;
calibrateCamera(objectPoints, imagePoints, imageSize,
                cameraMatrix, distCoeffs, rvecs, tvecs);
// cameraMatrix 包含 fx, fy, cx, cy
// distCoeffs 包含 k1, k2, p1, p2, k3

坐标系转换的实战意义

在分拣系统中,相机通常安装在传送带正上方,光轴垂直于传送带平面。此时外参中的旋转矩阵接近单位矩阵,平移向量表示相机光心在世界坐标系中的位置。但实际安装难免有倾斜,必须通过标定修正。若忽略畸变,图像边缘的物体坐标误差可达5~10mm,对于需要精确抓取的Delta机器人是不可接受的。

经验提醒:标定板必须平整,拍摄时尽量覆盖整个视野,尤其是边缘区域。标定后应使用测试点验证重投影误差,通常要求小于0.5像素。

4.3 颜色空间:RGB、HSV与灰度

核心原理

颜色空间是描述颜色的数学模型。最常用的是RGB空间,通过红、绿、蓝三通道的强度组合表示颜色,每个通道0~255。但RGB对光照变化敏感,同一物体在不同亮度下RGB值波动大。HSV空间将颜色分解为色调(Hue)、饱和度(Saturation)和明度(Value),更接近人眼感知,且H通道对光照不敏感,适合颜色识别。灰度图只有单通道,表示亮度信息,是预处理的基础。

颜色空间选择判断

场景推荐空间原因
目标颜色单一且光照稳定RGB直接阈值分割简单
光照变化大或颜色相近HSVH通道稳定,S和V可调
形状识别/轮廓提取灰度减少计算量,突出边缘
多颜色分拣HSV + 颜色直方图可建立颜色模型

转换公式与实战

RGB转HSV的公式中,H的计算涉及最大值和最小值的比较。在OpenCV中,使用cvtColor(src, dst, COLOR_BGR2HSV)即可完成转换。注意OpenCV中H范围是0~180,S和V范围是0~255,与理论值不同。

案例拆解:某分拣线需要区分红色和橙色药瓶。在RGB空间下,红色(200,50,50)和橙色(220,120,30)的R通道接近,难以区分。转换到HSV后,红色H≈0~10,橙色H≈15~25,通过设定H阈值即可稳定分割。实际调试中,还发现S通道低于40时颜色偏灰,需结合S阈值过滤。

常见误区:直接使用RGB阈值分割彩色物体。RGB三个通道相互关联,光照变化会导致阈值失效。建议优先使用HSV的H通道。

4.4 图像预处理:灰度化、滤波与二值化

灰度化

灰度化是将三通道RGB图像转换为单通道灰度图。常用加权平均法:Gray = 0.299R + 0.587G + 0.114B,权重基于人眼对绿色最敏感、蓝色最不敏感的特性。OpenCV的cvtColor(img, gray, COLOR_BGR2GRAY)直接实现。灰度化后数据量减少2/3,处理速度显著提升。

滤波去噪

图像噪声主要来自传感器暗电流、环境光干扰和传输过程。常用滤波方法:高斯滤波——用高斯核加权平均,适合去除高斯噪声,但会模糊边缘;中值滤波——取邻域像素中值,对椒盐噪声(黑白点)效果极佳,且能保留边缘。滤波核大小通常为3×3或5×5,核越大去噪越强但细节损失越多。

// 高斯滤波与中值滤波对比
GaussianBlur(src, dst, Size(5,5), 1.5);   // 高斯模糊
medianBlur(src, dst, 5);                   // 中值滤波

二值化

二值化将灰度图转换为只有0和255两个值的图像,便于轮廓提取。固定阈值法适用于光照均匀的场景,但分拣现场光照常波动,推荐使用OTSU自适应阈值——自动计算最佳阈值,使前景和背景的类间方差最大。OpenCV中threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU)。

预处理流程与参数调优

  1. 采集原始图像 → 检查曝光和清晰度
  2. 灰度化 → 减少数据量
  3. 中值滤波(核3×3或5×5)→ 去除椒盐噪声
  4. OTSU二值化 → 分离目标与背景
  5. 形态学操作(腐蚀/膨胀)→ 消除小孔洞和毛刺

完整案例闭环:某电子元件分拣线,目标为黑色IC芯片(10mm×10mm),背景为白色传送带。初始图像有反光导致芯片边缘出现白色高光。处理流程:灰度化 → 中值滤波(5×5)去除反光噪点 → OTSU二值化(阈值自动计算为128)→ 形态学闭运算(5×5核)填充芯片内部孔洞。结果:轮廓提取完整,中心坐标误差±0.3mm,满足抓取要求。若直接使用固定阈值100,反光区域被误判为背景,导致轮廓断裂。

调优经验:滤波核大小应略大于噪声颗粒尺寸,但小于目标最小特征尺寸。二值化后若目标内部有孔洞,优先尝试闭运算而非增大滤波核,因为增大滤波核会模糊边缘。

总结复盘:预处理的目标是“保留目标特征,去除无关信息”。灰度化是降维,滤波是去噪,二值化是分割。每一步的参数选择都需结合具体场景验证,不可盲目套用默认值。建议建立参数记录表,记录不同光照、不同产品下的最优参数组合,便于快速切换。