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 和像素格式影响,像素格式影响带宽与主机负载,白平衡与增益共同影响色彩与噪声。下图给出它们之间的主要影响路径,便于在调参时快速定位瓶颈。
一套可复现的配置流程
把上述关系落到操作上,可以按以下顺序执行,避免反复来回改参数:
- 确定目标帧率与运动模糊容忍度,先设 AcquisitionFrameRateEnable = True,并给出目标帧率。
- 根据帧周期反推曝光上限,例如 200 fps 对应 5 ms 周期,曝光不超过 5 ms。
- 在曝光上限内尽量用大曝光,不足的亮度用增益补,增益一般不超过 10 dB。
- 选择像素格式:优先 Bayer 以保留帧率与带宽余量,主机端做转换。
- 设置 ROI,先减高度再考虑减宽度,注意对齐约束。
- 用灰卡做一次白平衡 Once,锁定 BalanceRatio。
- 采集一帧,检查直方图、灰卡 RGB 偏差、实际帧率是否达标。
完成以上配置后,建议把最终参数保存为相机用户集(UserSet),例如 UserSet1,便于下次直接加载,保证不同批次采集条件一致。参数配置不是一次性的,而是随场景、光照、运动速度变化需要重新审视的工程决策。