跳转到内容
STAGING SERVER
DEVELOPMENT SERVER

操作指南:使用 Sequencer 模式和 PyPylon 通过 Basler 相机进行 HDR 成像#

本文介绍了如何使用配有 Sequencer Mode 和 PyPylon SDK 的 Basler 相机采集和处理 HDR (High Dynamic Range) 图像。其中涵盖了相机端配置以及使用 OpenCV 在主机端进行图像融合和色调映射。

本文针对 ace 2 和 boost R 相机编写,但其原则同样适用于支持 Sequencer 的其他 Basler 相机。请根据您的具体相机型号酌情调整代码。

目标#

其目标是利用相机内置的 Sequencer 拍摄一系列具有不同 Exposure Time 的图像,然后将其合并为具有更好阴影和高光细节的单个 HDR 图像。其结果是一个适用于显示或进一步处理的色调映射图像。

硬件和软件要求#

硬件#

  • Basler 面阵相机(支持 Sequencer Mode)
  • 稳定的照明条件,无灯光闪烁
  • 稳定的场景(固定的相机位置和目标)

软件#

  • Python 3.8+
  • PyPylon Python 绑定
  • OpenCV (cv2)
  • NumPy
pip install pypylon opencv-python numpy

HDR 采集工作流程#

曝光序列配置#

相机配置有一系列以微秒为单位的 Exposure Time:

exposure_times_us = [50, 500, 5000, 50000]

每个 Exposure Time 都加载到一个单独的 Sequencer Set 中。相机配置为在每次触发后自动循环遍历这些 Set。

关键步骤:

  • SequencerConfigurationMode = On
  • 设置 ExposureTime 和 SequencerSetNext
  • 配置 SequencerTriggerSource = ExposureStart
  • 保存每个 Set 并退出配置模式

配置完成后,在 Burst Mode 下触发相机:

camera.AcquisitionBurstFrameCount = len(exposure_times_us)
camera.TriggerSource = "Software"
camera.TriggerSelector = "FrameBurstStart"

捕获的图像将作为 16 位 TIFF 保存到文件夹中(例如 raw_image/),文件名中编码了它们的 Exposure Time:img_5000us.tiff

HDR 图像处理#

分步流程:#

  1. 从磁盘加载 16 位 TIFF。
  2. 进行位移操作以提取 12 位值。
  3. 归一化为 [0,1] 范围内的 float32。
  4. 应用三角形权重函数。
  5. 计算辐射图。
  6. 使用 Reinhard 算子进行色调映射。
  7. 将结果保存为 PNG。

示例图像#

以下输入图像使用不同的 Exposure Time 捕获:

Exposure Time 图像
50 µs
500 µs
5000 µs
50000 µs

HDR 融合结果#

最终经过色调映射的图像结合了所有曝光的细节:

色调映射图像结果

注意事项和建议#

  • 确保在所有曝光过程中相机位置和光照保持固定。
  • Sequencer 设置将一直保留,直到相机断电或重置。
  • 如果需要,使用 OpenCV EXR 支持保存真正的 HDR (cv2.imwrite("output.exr", hdr_image))。
  • 对于彩色相机,需要进行额外的去马赛克和白平衡步骤。

故障排除#

问题 原因 解决方法
GrabTimeout Exposure Time 太长或 FPS 太低 增加超时时间
无 HDR 效果 Exposure Time 范围太窄 使用更多样化的时间
文件读取错误 TIFF 文件未写入或路径错误 请检查权限和文件夹

参考#

返回知识库文章