2、视觉基础:图像采集、颜色空间、分辨率、帧率、摄像头标定与畸变校正基础

旭日机器人视觉系统的第一课,不是算法,而是“看得清、看得准”。图像采集、颜色空间、分辨率、帧率、摄像头标定与畸变校正,构成了机器人感知世界的底层物理与数学基础。如果这些基础不牢,后续的目标识别、跟随和运动控制接口都会建立在“失真”的数据之上。本章将系统梳理从光信号到数字图像、再到几何校正的完整链路,帮助你在工程实践中建立正确的视觉数据观。

图像采集 CMOS/CCD 镜头/光圈 曝光/增益 ISP处理 颜色空间 RGB HSV/HSL YUV/YCrCb 灰度/二值 几何校正 内参矩阵 畸变系数 标定板 重投影 分辨率 + 帧率 → 数据带宽 → 处理延迟 → 控制实时性 分辨率决定空间精度,帧率决定时间精度,两者共同约束视觉系统的实时性边界 分辨率: 640×480 ~ 1920×1080 帧率: 30/60/120 FPS 标定误差: <0.5 pixel

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

图像采集是视觉系统的“感官入口”。旭日机器人通常搭载USB摄像头或MIPI接口的CMOS传感器。光线通过镜头聚焦到感光元件上,每个像素点将光强度转换为电荷量,再经过模数转换(ADC)输出为数字值。这一过程涉及三个关键控制参数:曝光时间(决定进光量)、增益(放大信号强度)、白平衡(校正色温偏差)。

在实际工程中,采集环节最常见的错误是“自动参数陷阱”。例如,当机器人从室内移动到室外时,自动曝光会让画面突然过亮或过暗,导致后续的目标识别算法失效。因此,在固定光照环境下,建议手动锁定曝光和增益;在动态光照下,应使用带防抖动的自动曝光策略,并限制增益上限以避免噪声放大。

经验提醒:采集图像时,务必检查“丢帧”现象。在Linux下使用V4L2接口时,可以通过 v4l2-ctl --set-fmt-video=width=640,height=480,pixelformat=YUYV 设置格式,并用 v4l2-ctl --stream-mmap --stream-count=100 测试实际帧率是否达标。

2.2 颜色空间:机器人如何“看懂”颜色

颜色空间是颜色信息的数学表达方式。旭日机器人视觉中最常用的三种颜色空间为:RGB(面向显示设备)、HSV(面向颜色分割)、YUV(面向视频传输与压缩)。RGB空间对光照变化极其敏感,同一物体在不同亮度下RGB值差异巨大;而HSV将色调(H)、饱和度(S)、明度(V)分离,使得颜色识别对光照鲁棒性更强。

例如,识别红色目标时,在RGB空间需要同时判断R>200且G<100且B<100,阈值难以设定;而在HSV空间,只需设定H在0~10°或170~180°范围内,S>0.4,V>0.3即可稳定提取。YUV空间则常用于视频流处理,Y分量代表亮度,UV代表色度,便于在低带宽下保持颜色信息。

颜色空间 分量含义 适用场景 光照敏感性
RGB 红/绿/蓝三通道 显示、图像保存 高
HSV 色调/饱和度/明度 颜色分割、目标识别 低(H分量)
YUV 亮度/色度 视频传输、压缩编码 中
灰度 单通道亮度 边缘检测、形状匹配 高

2.3 分辨率与帧率:精度与实时性的权衡

分辨率决定图像的空间细节,帧率决定时间分辨率。旭日机器人常用的分辨率组合包括:640×480@30FPS(低延迟、适合快速跟随)、1280×720@30FPS(平衡之选)、1920×1080@15FPS(高精度但帧率受限)。选择时需要计算数据带宽:640×480×30×2字节(YUV422)= 18.4MB/s,而1080p@30FPS则高达124MB/s,这对USB带宽和处理器能力都是考验。

在运动控制接口中,帧率直接影响控制环路的稳定性。如果视觉帧率低于控制频率,会导致目标位置更新滞后,产生振荡。一般建议视觉帧率至少是控制频率的2~3倍。例如,若运动控制周期为20ms(50Hz),视觉帧率应不低于100FPS,或采用预测补偿算法。

实战场景:某巡检机器人需要识别10米外的仪表读数,同时保持1m/s的移动速度。若使用640×480分辨率,仪表在图像中仅占约20×30像素,OCR识别准确率不足60%。将分辨率提升至1920×1080后,仪表区域扩大至约70×100像素,识别率提升至95%。但帧率从60FPS降至20FPS,导致运动控制延迟增加。最终方案:采用“双分辨率策略”——高速移动时用低分辨率跟踪,接近目标后切换高分辨率识别。

2.4 摄像头标定与畸变校正

摄像头标定是视觉定位精度的基石。由于镜头制造公差和装配误差,图像会产生两类畸变:径向畸变(桶形/枕形)和切向畸变(镜头与传感器不平行)。标定的核心是求解内参矩阵(焦距fx、fy,主点cx、cy)和畸变系数(k1、k2、p1、p2、k3)。

标准标定流程如下:

  1. 打印7×9或9×11的棋盘格标定板,方格边长20~30mm,贴在平整硬板上。
  2. 从不同角度、距离拍摄15~20张标定板图像,覆盖画面中心和边缘。
  3. 使用OpenCV的 cv2.findChessboardCorners() 提取角点,亚像素精细化。
  4. 调用 cv2.calibrateCamera() 计算内参和畸变系数。
  5. 验证重投影误差,通常应小于0.5像素。
import cv2
import numpy as np

# 准备标定点
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((7*9, 3), np.float32)
objp[:, :2] = np.mgrid[0:9, 0:7].T.reshape(-1, 2) * 25.0  # 25mm方格

obj_points = []  # 世界坐标
img_points = []  # 像素坐标

for fname in glob.glob('calib_images/*.jpg'):
    img = cv2.imread(fname)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    ret, corners = cv2.findChessboardCorners(gray, (9, 7), None)
    if ret:
        corners2 = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
        obj_points.append(objp)
        img_points.append(corners2)

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(
    obj_points, img_points, gray.shape[::-1], None, None)
print("内参矩阵:\n", mtx)
print("畸变系数:", dist.ravel())

畸变校正后的图像可以直接用于像素坐标到世界坐标的转换。在旭日机器人中,标定结果通常以YAML文件保存,供后续的视觉伺服和目标定位模块调用。

风险提示:标定板不平整、拍摄距离过近(小于镜头最小工作距离)、图像过曝或欠曝,都会导致标定失败。另外,标定后应固定镜头焦距和光圈,任何机械调整都需要重新标定。

2.5 案例拆解:移动机器人视觉标定与畸变校正实战

背景与约束:某仓储AGV需要识别地面二维码进行定位,定位精度要求±2cm。AGV搭载俯视摄像头,安装高度1.2m,视场角约60°。初始测试发现,二维码在图像边缘时识别位置偏差达5cm。

初始现象:使用未标定的摄像头直接进行二维码识别,中心区域定位误差约1cm,但边缘区域误差急剧增大至5~8cm,且二维码边缘出现明显的弧形弯曲。

分析判断:这是典型的径向畸变问题。广角镜头在边缘产生桶形畸变,导致像素坐标与实际物理坐标的映射关系非线性。必须进行标定和畸变校正。

操作步骤:

  1. 制作A3尺寸棋盘格标定板(7×10格,每格30mm),确保覆盖整个视场。
  2. 在AGV实际工作高度和角度下,拍摄20张不同姿态的标定板图像。
  3. 使用OpenCV标定,得到fx=820.3, fy=819.7, cx=640.2, cy=359.8,畸变系数k1=-0.352, k2=0.124, p1=0.0012, p2=-0.0008。
  4. 对每帧图像执行 cv2.undistort() 校正,并裁剪掉校正后产生的黑色边缘区域。
  5. 重新测试二维码识别,边缘区域误差降至1.5cm以内。

结果对比:校正前平均定位误差3.8cm,最大误差8.2cm;校正后平均误差0.9cm,最大误差1.8cm,满足±2cm的精度要求。

风险与代价:畸变校正会损失约8%的有效像素区域(边缘被裁剪),且校正后的插值运算增加了约3ms的处理时间。对于30FPS的系统,总延迟增加约10%,在可接受范围内。

复盘经验:标定不是一次性工作。AGV经过长时间运行后,镜头可能因振动产生微小位移,建议每季度重新标定一次。同时,标定板应使用哑光材质,避免反光导致角点检测失败。

2.6 常见误区与总结复盘

在视觉基础环节,工程师常犯以下错误:

  • 误区一:认为分辨率越高越好。高分辨率带来计算量剧增,且对镜头解像力要求更高,有时反而降低识别稳定性。
  • 误区二:忽略帧率与运动速度的匹配。当目标在图像中移动速度超过每帧10像素时,会产生运动模糊,需要缩短曝光时间或提高帧率。
  • 误区三:标定后不验证。标定结果应通过重投影误差和实际测量双重验证,不能只看重投影误差。
  • 误区四:颜色空间选择不当。在HSV中分割颜色时,H分量在0°和180°附近是连续的,红色目标需要特殊处理两个区间。
总结:图像采集是视觉系统的“地基”,颜色空间是“语言”,分辨率与帧率是“资源预算”,标定与畸变校正是“精度保障”。旭日机器人视觉系统的稳定性,取决于这四个环节的协同优化。建议在项目启动时,先完成摄像头选型、标定和基础图像质量验证,再进入算法开发阶段。一个经过严格标定的低成本摄像头,往往比一个未标定的高成本摄像头表现更好。