콘텐츠로 건너뛰기
STAGING SERVER
DEVELOPMENT SERVER

사용자 가이드: Sequencer Mode 및 PyPylon을 활용한 Basler 카메라의 HDR (High Dynamic Range) 이미징#

이 문서는 Sequencer Mode 및 PyPylon SDK를 지원하는 Basler 카메라를 사용하여 HDR (High Dynamic Range) 이미지를 취득하고 처리하는 방법을 설명합니다. 카메라 측 설정과 OpenCV를 이용한 호스트 측 이미지 퓨전 및 톤 매핑을 모두 다룹니다.

이 문서는 ace 2 및 boost R 카메라를 대상으로 작성되었으나, 시퀀서 기능을 지원하는 다른 Basler 카메라에도 동일한 원리가 적용됩니다. 특정 카메라 모델에 맞게 코드를 적절히 수정하여 사용하십시오.

목표#

목표는 카메라의 내장 시퀀서를 사용하여 노출 시간이 다른 일련의 이미지를 캡처한 다음, 이를 어두운 영역과 밝은 영역의 디테일이 향상된 단일 HDR 이미지로 병합하는 것입니다. 결과물은 디스플레이나 추가 처리에 적합한 톤 매핑된 이미지입니다.

하드웨어 및 소프트웨어 요구 사항#

하드웨어#

  • Basler 영역 스캔 카메라 (시퀀서 모드 지원)
  • 안정적인 조명 조건, 조명 깜박임 없음
  • 안정적인 장면 (고정된 카메라 위치 및 대상)

소프트웨어#

  • Python 3.8+
  • PyPylon Python 바인딩
  • OpenCV (cv2)
  • NumPy
pip install pypylon opencv-python numpy

HDR 캡처 워크플로#

Exposure Sequence 설정#

카메라는 마이크로초 단위의 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"

캡처된 이미지는 노출 시간이 파일 이름에 인코딩된 상태로 raw_image/ 등의 폴더에 16비트 TIFF 파일로 저장됩니다 (img_5000us.tiff).

HDR 이미지 처리#

단계별 프로세스:#

  1. 디스크에서 16비트 TIFF를 로드합니다.
  2. 비트 시프트(Bit-shift)를 수행하여 12비트 값을 추출합니다.
  3. [0,1] 범위의 float32로 정규화합니다.
  4. 삼각형 가중치 함수를 적용합니다.
  5. 휘도 맵(Radiance map)을 연산합니다.
  6. Reinhard 연산자로 톤 맵(Tone map)을 적용합니다.
  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)).
  • 컬러 카메라의 경우, 추가적인 디모자이킹(demosaicing) 및 화이트 밸런싱 단계가 필요합니다.

문제 해결#

문제 원인 조치
GrabTimeout 노출 시간이 너무 길거나 프레임 레이트(FPS)가 너무 낮습니다. 타임아웃을 늘리십시오.
HDR 효과가 없습니다. 노출 범위가 너무 좁습니다. 더 다양한 시간을 사용하십시오.
파일 읽기 오류 TIFF가 기록되지 않았거나 경로가 잘못되었습니다. 권한 및 폴더를 확인하십시오.

참고문헌#

기술 문서로 돌아가기