4. 相机参数配置与图像格式选择

在 Basler USB3 相机接入主机后,真正决定“图像看起来怎么样、帧率能跑多高、后续算法好不好处理”的,是相机内部的一组参数与格式设置。本节围绕曝光、增益、白平衡、像素格式、Bayer 转换、ROI 与帧率之间的关系展开,目标是让你能根据实际场景,独立完成一套可复现的参数配置。

曝光与增益:先定亮度,再定噪声

曝光时间(ExposureTime)决定传感器感光时长,单位通常为微秒。曝光越长,图像越亮,但运动物体越容易拖影。增益(Gain)是对传感器读出信号的电学放大,单位常用 dB 或百分比。增益提高会同时放大信号与噪声,因此应优先用曝光满足亮度,增益只作为补充。

以 Basler acA1920-155um(示例型号)为例,在 20 ms 曝光、增益 0 dB 下,若画面偏暗,可先尝试把曝光提到 30 ms;若物体运动导致拖影不可接受,则保持曝光不变,把增益提到 6 dB 左右,并观察暗部噪声是否明显上升。判断依据是:在目标区域取一块平坦灰面,看直方图是否集中在 80~200 灰度区间,且没有大量像素贴到 255。

经验顺序:先固定帧率上限 → 再定曝光上限(受运动模糊约束)→ 最后用增益补足亮度。不要一上来就拉高增益。

白平衡:让灰色真的是灰色

白平衡通过调整 R、G、B 三通道增益,使中性灰在图像中不偏色。Basler 相机支持自动白平衡(BalanceWhiteAuto = Once / Continuous)和手动 BalanceRatio。实操中建议:先用 Once 在标准白板或灰卡下完成一次平衡,再切回 Off,把得到的比例固定下来,避免连续自动白平衡在场景变化时反复漂移。

判断方法:在画面中放置一张灰卡,采集后读取该区域平均 RGB 值,若 R/G 与 B/G 偏差在 ±3% 以内,可认为白平衡基本到位。若偏差较大,手动微调 BalanceRatioSelector 对应的 Ratio 值。

像素格式与 Bayer 转换

Basler 彩色相机传感器输出的是 Bayer 阵列原始数据,常见格式有 BayerRG8、BayerRG12 等。相机可输出未转换的 Bayer 格式,也可在机内转换为 RGB8、BGR8 或 YCbCr422。选择原则:

  • 需要最高帧率、最小带宽、后续由主机做高质量去马赛克:选 Bayer 格式。
  • 需要直接显示或交给不处理 Bayer 的算法:选 RGB8 / BGR8。
  • 对色彩精度要求高、且主机算力充足:Bayer12 + 主机端高质量插值。

Bayer 转换的核心是去马赛克(Demosaic):每个像素只有 R、G、B 中的一个分量,需要通过邻域插值补出另外两个分量。机内转换通常速度快但算法固定;主机端转换可选用更高质量算法,但会增加 CPU/GPU 开销。若使用 OpenCV,可用 cv::cvtColor(src, dst, cv::COLOR_BayerRG2BGR) 完成转换,注意 Bayer 排列顺序必须与相机输出一致,否则会出现红蓝互换或偏色。

ROI 设置与帧率关系

ROI(Region of Interest)只读出传感器的一部分区域,是提升帧率最直接的手段。Basler USB3 相机的帧率近似与读出高度成反比:高度减半,帧率约翻倍。宽度对帧率影响通常小于高度,因为多数传感器按行读出。

以 acA1920-155um 为例,全幅 1920×1200 时最高约 155 fps;若设置 Height = 600、OffsetY = 300,帧率可提升到约 300 fps 量级(示例估算,实际以相机规格为准)。设置 ROI 时要注意:OffsetX、OffsetY 与 Width、Height 必须满足相机的对齐约束(常见为 4 或 8 像素对齐),否则会报参数错误。

# 伪代码:设置 ROI 与曝光
camera.Width.SetValue(1920)
camera.Height.SetValue(600)
camera.OffsetX.SetValue(0)
camera.OffsetY.SetValue(300)
camera.ExposureTime.SetValue(8000)   # 8 ms
camera.Gain.SetValue(3.0)            # 3 dB
camera.PixelFormat.SetValue("BayerRG8")
camera.AcquisitionFrameRateEnable.SetValue(True)
camera.AcquisitionFrameRate.SetValue(200.0)

参数之间的耦合关系

这些参数不是独立的:曝光时间上限受帧率约束(曝光不能长于帧周期),帧率又受 ROI 和像素格式影响,像素格式影响带宽与主机负载,白平衡与增益共同影响色彩与噪声。下图给出它们之间的主要影响路径,便于在调参时快速定位瓶颈。

Basler USB3 相机参数耦合关系 曝光时间 ExposureTime 增益 Gain 白平衡 BalanceRatio 图像亮度与噪声 直方图 / SNR 像素格式 Bayer / RGB / YCbCr ROI 尺寸 Width / Height 帧率 AcquisitionFrameRate USB3 带宽 主机负载 帧率约束曝光上限 格式影响带宽 共同决定亮度

一套可复现的配置流程

把上述关系落到操作上,可以按以下顺序执行,避免反复来回改参数:

  1. 确定目标帧率与运动模糊容忍度,先设 AcquisitionFrameRateEnable = True,并给出目标帧率。
  2. 根据帧周期反推曝光上限,例如 200 fps 对应 5 ms 周期,曝光不超过 5 ms。
  3. 在曝光上限内尽量用大曝光,不足的亮度用增益补,增益一般不超过 10 dB。
  4. 选择像素格式:优先 Bayer 以保留帧率与带宽余量,主机端做转换。
  5. 设置 ROI,先减高度再考虑减宽度,注意对齐约束。
  6. 用灰卡做一次白平衡 Once,锁定 BalanceRatio。
  7. 采集一帧,检查直方图、灰卡 RGB 偏差、实际帧率是否达标。
常见问题:帧率上不去,先查 ROI 是否过大、像素格式是否为 RGB8、曝光是否超过帧周期;图像偏色,先查 Bayer 排列顺序是否与转换代码一致,再查白平衡是否被自动模式反复改写。

完成以上配置后,建议把最终参数保存为相机用户集(UserSet),例如 UserSet1,便于下次直接加载,保证不同批次采集条件一致。参数配置不是一次性的,而是随场景、光照、运动速度变化需要重新审视的工程决策。