图像采集与传输:相机接口标准、触发模式与数据格式

图像采集是整个机器视觉系统的第一道关卡。说白了,相机选对了接口,项目就成功了一半。我见过太多项目在调试阶段才发现带宽不够用,或者触发延迟对不上产线节拍——那时候再换相机,成本就高了。

相机接口标准:GigE、USB3.0、Camera Link

目前主流的数字相机接口就这三种。我按自己的使用经验给你排个序:GigE 最灵活,USB3.0 最方便,Camera Link 最硬核。

接口 带宽 线缆长度 典型场景 我的评价
GigE Vision 1 Gbps(约 125 MB/s) 100 米(Cat6) 多相机、远距离、产线分散 稳定,适合工业环境
USB3.0 Vision 5 Gbps(约 500 MB/s) 3~5 米(可加中继) 桌面检测、单相机、快速原型 即插即用,但线长受限
Camera Link 2.04~6.8 Gbps(Base/Medium/Full) 10~15 米 高分辨率、高帧率、线阵相机 延迟最低,但需要采集卡
我的习惯:如果项目预算允许,我会优先选 GigE。为什么?因为 100 米线缆意味着相机可以放在产线任意位置,而且 PoE(Power over Ethernet)供电省去一根电源线。我曾经在一个汽车零部件检测项目中,用 8 台 GigE 相机覆盖了 4 个工位,全部通过一台交换机汇聚到工控机,布线非常清爽。

触发模式与帧率控制

触发模式决定了相机什么时候开始曝光。这个选不对,图像要么拍早了,要么拍晚了,要么拍重了。

三种常用触发模式

  • 自由运行(Free-Run):相机按内部时钟连续采集。适合传送带匀速、目标连续出现的场景。但要注意——如果目标间隔不均匀,会浪费带宽和存储。
  • 硬件触发(Hardware Trigger):外部传感器(光电开关、编码器)给一个脉冲,相机拍一张。这是工业现场最可靠的方式。我建议所有产线项目都优先考虑硬件触发。
  • 软件触发(Software Trigger):上位机发指令触发采集。延迟不稳定(通常 1~10 ms),只适合低速或实验场景。
我曾经踩过的坑:在一个锂电池极片检测项目中,我用了软件触发,结果发现每次触发延迟波动达到 5 ms。产线速度是 500 mm/s,5 ms 的误差意味着目标位置偏移了 2.5 mm——图像里的缺陷位置全偏了。后来换成硬件触发,延迟稳定在 50 μs 以内,问题才解决。

帧率控制的核心公式

帧率不是想设多少就设多少。它受三个因素限制:

最大帧率 = 1 / (曝光时间 + 读出时间 + 传输时间)

实际帧率 ≤ min(相机最大帧率, 接口带宽限制, 触发信号频率)

举个例子:你有一台 500 万像素相机,像素深度 8 bit,帧率标称 60 fps。但如果你用 GigE 接口:

单帧数据量 = 2592 × 1944 × 1 = 5.04 MB
GigE 理论带宽 = 125 MB/s
理论最大帧率 = 125 / 5.04 ≈ 24.8 fps

看到了吗?接口带宽成了瓶颈。你实际能跑到的帧率只有 25 fps 左右,而不是 60 fps。

避坑指南:选相机时,别只看相机标称帧率。一定要算一下接口带宽能不能撑住。我一般会留 20% 的余量——比如算出来理论 25 fps,实际只跑 20 fps,给网络抖动和 CPU 处理留点空间。

图像数据格式:Bayer、RGB、YUV

相机输出的原始数据格式,直接影响后续处理流程。选错了格式,要么浪费带宽,要么丢失信息。

格式 数据量(以 1920×1080 为例) 特点 典型用途
Bayer(RAW) 2.07 MB(8 bit) 每个像素只有一种颜色,需要去马赛克 工业相机、高帧率场景
RGB888 6.22 MB(24 bit) 每个像素 3 个通道,颜色完整 显示、颜色分析、深度学习
YUV422 4.15 MB(16 bit) 亮度全分辨率,色度半分辨率 视频流、传输带宽敏感场景

我个人习惯是:能走 Bayer 就走 Bayer。为什么?因为 Bayer 数据量最小,传输最快。而且现在的 ISP 算法(比如去马赛克、白平衡)在 GPU 上跑得飞快,完全可以在上位机做。我在一个 PCB 检测项目中,用 Bayer 格式把帧率从 30 fps 提到了 45 fps——就是因为省掉了相机内部的 RGB 转换时间。

注意:如果你用 Bayer 格式,一定要知道相机的 Bayer 排列顺序(BGGR、RGGB、GBRG、GRBG)。搞错了,图像颜色会完全乱掉。我一般会在相机 SDK 里读取这个参数,而不是硬编码。

图像传输带宽计算

带宽计算是系统设计的必修课。算错了,轻则丢帧,重则系统崩溃。

带宽计算公式

带宽需求 = 图像宽度 × 图像高度 × 像素深度 × 帧率 × 通道数

单位:字节/秒(Bps)

举个例子:

相机参数:2448 × 2048, 8 bit, 30 fps, 单色
带宽需求 = 2448 × 2048 × 1 × 30 = 150,405,120 Bps ≈ 143.4 MB/s

GigE 有效带宽 ≈ 110 MB/s(考虑协议开销)
结论:GigE 不够用,必须用 USB3.0 或 Camera Link
我曾经犯过的错:早期做项目时,我直接用理论带宽做设计。结果 GigE 相机死活跑不到标称帧率。后来才发现,GigE 的 1 Gbps 是物理层速率,实际有效载荷只有 900 Mbps 左右,再加上网络协议头、重传、交换机延迟,能用到 80% 就不错了。所以我现在算带宽时,会额外乘一个 1.3 的安全系数。

多相机带宽分配

如果你用多台相机,还要考虑总线共享的问题。比如 USB3.0 控制器通常共享 5 Gbps 带宽,4 台相机同时采集,每台只能分到 1.25 Gbps。我建议:

  • 多台 GigE 相机:用独立网卡或交换机端口隔离
  • 多台 USB3.0 相机:尽量分散到不同 USB 控制器(看主板芯片组)
  • Camera Link:每台相机独占采集卡通道
图像采集与传输知识体系 图像采集与传输 相机接口标准 GigE Vision · USB3.0 Vision Camera Link (Base/Medium/Full) 触发模式与帧率 Free-Run · Hardware Trigger Software Trigger · 帧率公式 图像数据格式 Bayer (RAW) · RGB888 YUV422 · 数据量对比 带宽计算:宽 × 高 × 深度 × 帧率 × 通道 安全系数 1.3 · 多相机共享 · 协议开销

嗯,到这里,图像采集与传输的核心内容就讲完了。你想想看,其实就三件事:选对接口、算对带宽、用对格式。这三件事做好了,后面的图像处理才能跑得稳。我每次做新项目,都会先拿这个框架过一遍,基本不会出大问题。