跳至內容
測試伺服器
開發伺服器

如何操作:使用 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
pip install pypylon opencv-python numpy

HDR 擷取工作流程#

曝光序列設定#

相機已設定一組微秒單位的 Exposure Time 列表:

exposure_times_us = [50, 500, 5000, 50000]

每個 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 影像處理#

逐步流程:#

  1. 從磁碟載入 16-bit TIFF。
  2. 進行位元位移(Bit-shift)以擷取 12-bit 數值。
  3. 將 [0,1] 範圍正規化為 float32。
  4. 套用三角形權重函數。
  5. 計算明亮度對應圖(Radiance Map)。
  6. 使用 Reinhard 運算子進行色調對應(Tone Map)。
  7. 將結果儲存為 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 或路徑錯誤 檢查權限與資料夾

References#

返回知識文章