유용한 팁

OpenCV에서 Bayer 패턴 영상 복원하기 (Demosaicing)

나희와더기 2025. 4. 25. 17:39
반응형

디지털 카메라는 이미지를 촬영할 때 RGB 3가지 색상 정보를 모두 한 번에 받지 않습니다. 대부분의 이미지 센서는 Bayer 필터 배열(Bayer pattern)을 이용해 R(빨강), G(초록), B(파랑) 중 하나의 색상만 받아들이고, 나머지 색상은 주변 픽셀을 통해 보간(interpolation)합니다. 이 과정을 디모자이싱(Demosaicing)이라고 하며, OpenCV에서 손쉽게 처리할 수 있습니다.


🎨 Bayer 패턴이란?

  • Bayer 패턴은 CCD/CMOS 센서에서 사용되는 가장 일반적인 필터 배열 방식입니다. 하나의 컬러 이미지를 얻기 위해 단일 센서 평면에 R, G, B 픽셀을 격자처럼 배열해 놓은 구조입니다. 예를 들어 아래와 같은 배열이 있습니다:
  • 이 배열들은 다음과 같은 방식으로 명명됩니다:
    • BGGR
    • GBRG
    • GRBG
    • RGGB
  • 각 패턴은 2×2 블록의 배치를 기준으로 이름이 결정됩니다.

출처: https://docs.opencv.org/4.x/de/d25/imgproc_color_conversions.html

 

📐 Demosaicing이란?

  • Bayer 패턴은 한 픽셀에 단일 색상 정보만 존재하므로, RGB 전체 색상을 복원하려면 주변 픽셀 정보를 바탕으로 누락된 색을 추정해야 합니다. 이 추정을 demosaicing 또는 debayering이라고 하며, OpenCV에서는 cv2.cvtColor() 함수를 통해 쉽게 수행할 수 있습니다.

🛠️ OpenCV로 Demosaicing 처리하기

import cv2
import numpy as np

# RAW Bayer 패턴 이미지 불러오기 (예: 8비트 grayscale)
bayer = cv2.imread('bayer_image.png', cv2.IMREAD_GRAYSCALE)

# Demosaicing 수행 (예: BGGR 패턴일 경우)
rgb = cv2.cvtColor(bayer, cv2.COLOR_BayerBG2BGR)

# 결과 저장
cv2.imwrite('output_rgb.png', rgb)
  • OpenCV에서는 다양한 Bayer 패턴을 다음과 같이 지원합니다:
Bayer 패턴 OpenCV 상수
BGGR cv2.COLOR_BayerBG2BGR
GBRG cv2.COLOR_BayerGB2BGR
GRBG cv2.COLOR_BayerGR2BGR
RGGB cv2.COLOR_BayerRG2BGR

 

💡 Bayer 패턴 확인 및 주의사항

  • 카메라 센서의 물리적인 Bayer 패턴(RGGB, GRBG 등)과 실제 메모리에 저장된 이미지 배열의 시작 위치는 다를 수 있습니다. (예를 들면 이미지가 한 픽셀 이동(왼쪽, 위쪽 등)된 채 저장되는 경우)

출처: https://docs.opencv.org/4.x/de/d25/imgproc_color_conversions.html

  • 위 그림과 같이 실제 패턴이 RGGB 처럼 보여도, OpenCV 상에서는 BGGR 일 수 도 있으며, 이 경우 cv2.COLOR_BayerBG2RGB를 써야 정상 출력 됩니다.
반응형