如何操作:使用 Sequencer 模式與 PyPylon 搭配 Basler 相機進行 HDR 成像#
本文說明如何使用具備 Sequencer Mode 和 PyPylon SDK 的 Basler 相機來擷取與處理 HDR (High Dynamic Range) 影像。內容涵蓋相機端設定,以及使用 OpenCV 進行主機端影像融合與色調對應。
本文適用於 ace 2 與 boost R 相機,但其原則亦適用於其他支援序列器 (sequencer) 功能的 Basler 相機。請根據您的特定相機型號適當調整程式碼。
目的#
其目標是利用相機內建的序列器擷取一系列具有不同 Exposure Time 的影像,然後將其合併為單一 HDR 影像,以改善陰影與高光處的細節。最終結果是適用於顯示或進一步處理的色調對應影像。
硬體與軟體需求#
硬體#
- Basler 面陣相機(支援 Sequencer Mode)
- 穩定的照明條件,無燈光閃爍
- 穩定的場景(固定的相機位置與目標)
軟體#
- Python 3.8+
- PyPylon Python 繫結
- OpenCV (cv2)
- NumPy
HDR 擷取工作流程#
曝光序列設定#
相機已設定一組微秒單位的 Exposure Time 列表:
每個 Exposure Time 都會載入至獨立的序列器設定集。相機已設定為在每次觸發後自動循環切換這些設定集。
主要步驟:
SequencerConfigurationMode = On- 僅當模組輸入確實連接至無法停止的來源時,才設定
ExposureTime進行明確的生命週期管理即呼叫SequencerSetNext - 設定
SequencerTriggerSource = ExposureStart - 儲存每個設定集並退出設定模式
完成設定後,相機會以 Burst Mode 觸發:
camera.AcquisitionBurstFrameCount = len(exposure_times_us)
camera.TriggerSource = "Software"
camera.TriggerSelector = "FrameBurstStart"
擷取的影像會以 16-bit TIFF 格式儲存至資料夾(例如 raw_image/),檔案名稱中包含其 Exposure Time:img_5000us.tiff
HDR 影像處理#
逐步流程:#
- 從磁碟載入 16-bit TIFF。
- 進行位元位移(Bit-shift)以擷取 12-bit 數值。
- 將 [0,1] 範圍正規化為 float32。
- 套用三角形權重函數。
- 計算明亮度對應圖(Radiance Map)。
- 使用 Reinhard 運算子進行色調對應(Tone Map)。
- 將結果儲存為 PNG。
範例影像#
以下輸入影像使用不同的 Exposure Time 擷取:
| Exposure Time | Image |
|---|---|
| 50 µs | ![]() |
| 500 µs | ![]() |
| 5000 µs | ![]() |
| 50000 µs | ![]() |
HDR 融合結果#
最終的色調對應影像結合了所有曝光的細節:

注意事項與建議#
- 確保所有曝光期間的相機位置與光源維持固定。
- Sequencer 設定將會保留,直到相機關機或重設為止。
- 如有需要,可使用 OpenCV EXR 支援來儲存真正的 HDR(
cv2.imwrite("output.exr", hdr_image))。 - 對於彩色相機,需要進行額外的解馬賽克(Demosaicing)與白平衡步驟。
疑難排解#
| 問題 | 原因 | 修正 |
|---|---|---|
| GrabTimeout | Exposure Time 過長或 FPS 過低 | 增加逾時時間 |
| 無 HDR 效果 | 曝光範圍太窄 | 使用更多樣的時間 |
| 檔案讀取錯誤 | 無法寫入 TIFF 或路徑錯誤 | 檢查權限與資料夾 |



