4.11. 디베이어링(Debayering)¶
원시 Bayer 프레임은 픽셀당 하나의 색상 채널만 담고 있습니다. 이를 일반적인 3채널 RGB 이미지로 변환하려면, 적절한 색상의 주변 픽셀로부터 보간하여 모든 픽셀에서 누락된 두 채널을 채워야 합니다. 이 보간 과정이 바로 디베이어링(debayering) (디모자이킹이라고도 함)입니다. 몇 가지 알고리즘 계열이 주로 사용됩니다.
4.11.1. 슈퍼 픽셀(Super-pixel)¶
가장 저렴한 방식은 모든 2x2 Bayer 타일 – 빨강 셀 하나, 파랑 셀 하나, 초록 셀 두 개 – 을 하나의 출력 픽셀로 합치는 것입니다:
빨강 채널은 빨강 셀의 값이고,
파랑 채널은 파랑 셀의 값이며,
초록 채널은 두 초록 셀의 평균입니다.
각 2x2 입력 타일이 하나의 출력 픽셀이 되므로, 완성된 이미지는 센서의 너비와 높이가 각각 절반이 되고 픽셀 수는 4분의 1이 됩니다. 슈퍼 픽셀은 빠르고 보간 아티팩트가 없지만, 해상도 손실 때문에 최후의 수단으로 쓰이며 거의 사용되지 않습니다.
4.11.2. 쌍선형(Bilinear)¶
쌍선형(Bilinear) 보간은 값을 복사하거나 요약하는 대신 적절한 색상의 가장 가까운 픽셀들을 평균합니다. 정확한 평균 방식은 중심 픽셀이 어떤 색상을 기록하는지에 따라 달라지는데, 네 가지 경우가 3x3 이웃 영역에 누락된 채널을 서로 다르게 분포시키기 때문입니다.
빨강-초록 행의 초록 픽셀. 누락된 빨강 값은 좌우의 두 빨강 이웃을 평균하고, 누락된 파랑 값은 위아래의 두 파랑 이웃을 평균합니다.
누락된 빨강은 수평 방향 빨강 이웃에서, 누락된 파랑은 수직 방향 파랑 이웃에서 가져옵니다.¶
초록-파랑 행의 초록 픽셀. 빨강과 파랑이 뒤바뀐 동일한 형태입니다. 누락된 빨강 값은 위아래의 두 빨강 이웃을 평균하고, 누락된 파랑 값은 좌우의 두 파랑 이웃을 평균합니다.
누락된 빨강은 수직 방향 빨강 이웃에서, 누락된 파랑은 수평 방향 파랑 이웃에서 가져옵니다.¶
빨강 픽셀. 누락된 초록 값은 네 개의 상하좌우 초록 이웃(위, 아래, 왼쪽, 오른쪽)을 평균합니다. 누락된 파랑 값은 네 개의 대각선 파랑 이웃을 평균합니다.
누락된 초록은 네 개의 상하좌우 초록 이웃에서, 누락된 파랑은 네 개의 대각선 파랑 이웃에서 가져옵니다.¶
파랑 픽셀. 빨강 경우의 거울상입니다. 누락된 초록 값은 네 개의 상하좌우 초록 이웃을 평균하고, 누락된 빨강 값은 네 개의 대각선 빨강 이웃을 평균합니다.
누락된 초록은 네 개의 상하좌우 초록 이웃에서, 누락된 빨강은 네 개의 대각선 빨강 이웃에서 가져옵니다.¶
쌍선형 방식은 센서의 전체 해상도를 유지하고 대부분의 용도에 충분히 매끄럽지만, 여전히 에지에서 아티팩트를 보입니다. 두 색상 사이의 급격한 전환은 특정 방향으로 픽셀 격자를 가로지르며, 에지를 가로질러 평균하면 그 전환이 약간 부드러워집니다. 색상 에지와 휘도 에지가 정확히 일치하지 않는 곳에서는 출력에 희미한 색상 프린지가 나타납니다.
4.11.3. 쌍선형을 넘어서¶
더 나은 디베이어 알고리즘이 다양하게 존재합니다. 일부는 쌍선형의 작은 십자 형태 동일 색상 이웃보다 더 큰 이웃 영역을 사용하고 더 신중하게 선택된 계수로 샘플에 가중치를 부여하며, 다른 일부는 국소 에지의 방향을 검출하여 그 방향을 따라 보간을 편향시켜 픽셀 격자를 가로지르는 에지가 부드러워지지 않고 선명하게 유지되도록 합니다. 두 접근 방식 모두 쌍선형이 남기는 색상 프린지와 에지 부드러워짐을 줄이지만, 픽셀당 더 많은 연산과 더 많은 실리콘(또는 MCU 측에서 더 많은 연산)이 비용으로 듭니다.
주어진 OpenMV Cam에서 사용할 수 있는 디베이어 품질은 플랫폼에 따라 다릅니다 – 해당 카메라의 센서와 MCU가 무엇을 제공하느냐에 달려 있습니다.
4.11.4. 디베이어링이 실행되는 곳¶
이미지 신호 처리기(image signal processor, ISP) – 센서 칩 자체에 있거나 MCU 측에 있는 – 는 대부분의 경우 각 프레임이 이미징 파이프라인을 떠나기 전에 디베이어링을 수행합니다. 사용자 코드는 원시 모자이크를 전혀 건드리지 않고 완성된 3채널 RGB 이미지를 받습니다.
ISP에게 원시 Bayer 프레임을 변경 없이 통과시키도록 지시할 수도 있습니다. 원시 Bayer는 디베이어링된 이미지보다 메모리를 적게 차지하는데 – 픽셀당 3바이트 대신 1바이트 – 이는 프레임 저장이 병목이 될 때, 오프라인 처리를 위해 캡처할 때, 또는 프로젝트에서 소프트웨어로 사용자 정의 디베이어 알고리즘을 적용하려 할 때 유용합니다.