Chapter 12

카메라 색 재현

카메라는 세 개의 숫자를 기록하지만 그 숫자는 XYZ가 아니다. 센서의 분광 감도는 CIE 등색 함수와 다르고, 장면의 광원은 매번 바뀐다. 이 장은 카메라 RGB를 측색값으로 바꾸는 과정 — 색 보정 행렬(CCM), 화이트 밸런스, 광원 추정, 광원별 보간, 출력 렌더링 — 을 하나의 최적화 문제로 보고, 그 오차를 ΔE00과 노이즈 이득이라는 숫자로 따진다.

카메라는 관측자가 아니다

3장에서 색을 세 개의 적분값 XYZ로 정의했다. 장면의 한 점에서 오는 빛의 분광 분포가 광원 \( E(\lambda) \)와 반사율 \( R(\lambda) \)의 곱이라면, 표준 관측자와 카메라는 똑같은 모양의 적분을 계산한다. 차이는 가중 함수 하나뿐이다.

$$X_i = k\!\int E(\lambda)R(\lambda)\,\bar x_i(\lambda)\,d\lambda,\qquad c_k = \int E(\lambda)R(\lambda)\,s_k(\lambda)\,d\lambda$$
\( \bar x_i \in \{\bar x,\bar y,\bar z\} \): CIE 1931 등색 함수, \( s_k \) (\(k=R,G,B\)): 카메라 채널의 유효 분광 감도 = 렌즈 투과율 × IR 컷 필터 × 컬러 필터 × 실리콘 양자효율, \( k \): 완전 백색의 \(Y\)를 1(또는 100)로 맞추는 상수.

두 식은 모두 무한 차원의 스펙트럼을 3차원으로 사영(projection)하는 선형 연산이다. 사람 눈의 사영 방향은 \( \bar x\bar y\bar z \)가 펼치는 3차원 부분공간이고, 카메라의 사영 방향은 \( s_R s_G s_B \)가 펼치는 부분공간이다. 두 부분공간이 같다면 카메라 RGB와 XYZ는 3×3 행렬 하나로 정확히 오가지만, 다르다면 어떤 행렬도 모든 스펙트럼에 대해 맞출 수 없다. 카메라 색 재현의 모든 어려움은 이 한 문장에서 시작한다.

장면 스펙트럼 E(λ)·R(λ) 표준 관측자 x̄ ȳ z̄ 카메라 s_R s_G s_B IR 컷 X Y Z R G B (raw) 3×3 M ? 부분공간이 같을 때만 정확
그림 12-1. 같은 스펙트럼을 관측자와 카메라가 각자의 가중 함수로 적분한다. 카메라 RGB에서 XYZ로 가는 3×3 행렬이 모든 스펙트럼에 대해 정확하려면 두 가중 함수 집합이 같은 3차원 부분공간을 펼쳐야 한다.

이 장에서는 카메라 감도를 다음 교육용 모델로 쓴다. 각 채널은 가우시안 하나, IR 컷 필터는 로지스틱 함수다.

$$s_k(\lambda) = \exp\!\Big[-4\ln 2\,\frac{(\lambda-\mu_k)^2}{w_k^2}\Big]\cdot T_{\mathrm{IR}}(\lambda),\qquad T_{\mathrm{IR}}(\lambda) = \frac{1}{1+e^{(\lambda-\lambda_c)/8\,\mathrm{nm}}}$$
\( \mu_k \): 피크 파장, \( w_k \): 반치폭(FWHM), \( \lambda_c \): IR 컷 50% 파장. 기본값은 R 600/100 nm, G 530/100 nm, B 460/90 nm, \( \lambda_c \)=650 nm. 적분은 CIE 원표 범위인 380–780 nm, 5 nm 간격으로 한다.
모델의 한계

실제 센서 감도는 안료 필터의 비대칭 투과, 실리콘 QE의 파장 의존성, R 채널의 청색 쪽 2차 봉우리, 780 nm 이상의 근적외선 응답(이 모델은 780 nm에서 적분을 끊는다)을 가진다. 그래서 여기서 나오는 ΔE 값은 실제 카메라보다 대체로 작다(실제 카메라는 24색 차트에서 3×3 CCM만으로 평균 ΔE00 2–4 정도가 흔하다). 컬러 필터·IR 컷의 하드웨어 측면과 디모자이킹은 SensorBook의 컬러 필터와 디모자이킹 장을 보라. 이 장은 그 결과로 얻은 세 숫자를 측색적으로 어떻게 다루는지에 집중한다.

루터–아이브스 조건과 카메라 메타머리즘

카메라 감도가 등색 함수의 선형 결합이라고 하자. 즉 어떤 가역 3×3 행렬 \( A \)에 대해 \( \mathbf s(\lambda) = A\,\bar{\mathbf x}(\lambda) \)이다. 그러면 적분의 선형성에 의해 모든 스펙트럼에서 \( \mathbf c = A\,\mathbf X \)이고, \( \mathbf X = A^{-1}\mathbf c \)로 XYZ를 정확히 복원한다. 이것이 루터–아이브스 조건(Luther–Ives condition, Luther condition)이다. 이 조건을 만족하는 장치를 측색적(colorimetric) 장치라 부른다.

$$\mathbf s(\lambda)=A\,\bar{\mathbf x}(\lambda)\;\;\forall\lambda\quad\Longrightarrow\quad \mathbf c = A\,\mathbf X\;\;\text{(모든 } E,R\text{에 대해)}$$

실제 필터는 이 조건을 만족하지 못한다. 결과는 카메라 메타머리즘(camera/device metamerism)이다. 두 표면이 카메라에는 같은 RGB를 주지만 사람에게는 다른 색으로 보이거나, 그 반대가 생긴다. 카메라 감도 공간에 직교하는 스펙트럼 성분 \( \delta(\lambda) \) — 카메라의 메타머 블랙 — 을 반사율에 더하면 카메라 응답은 그대로이지만 XYZ는 바뀐다. 위 기본 카메라 모델로 계산하면 TCS05(청록)에 500 nm 부근 봉우리를 카메라 직교 성분만 남겨 더한 반사율은 D65 아래에서 카메라 RGB가 소수점 셋째 자리까지 같지만, 관측자에게는 Lab = (62.4, −17.5, −8.5) 대 (58.6, −11.3, −4.2), ΔE00 = 6.1만큼 다르다. 어떤 CCM도 이 둘을 동시에 맞출 수 없다. 같은 RGB에 서로 다른 답을 요구하기 때문이다.

span(x̄, ȳ, z̄) span(s_R, s_G, s_B) 반사 스펙트럼 φ = E·R 관측자 사영 → XYZ 카메라 사영 → RGB ν = ⅓·tr(P_A P_S) 두 평면이 같으면 ν = 1 어긋난 각도만큼 ν < 1
그림 12-2. 스펙트럼 공간(고차원)을 두 개의 3차원 부분공간으로 사영한다고 보면, 루터 조건은 '두 평면이 같다'는 조건이다. 평면이 어긋나 있으면 카메라 평면에 수직인 성분(메타머 블랙)은 RGB에 흔적을 남기지 않지만 XYZ는 바꾼다.

루터 조건을 얼마나 어겼는지 재는 방법은 두 갈래다. 하나는 스펙트럼 지표로, 감도 곡선 자체를 비교한다. 등색 함수 행렬 \( A \)(파장 × 3)와 카메라 감도 행렬 \( S \)의 열공간 사이 사영 일치도를 쓰는 Vora–Trussell 지표가 대표적이다.

$$\nu = \tfrac13\,\mathrm{tr}\!\left(P_A P_S\right),\qquad P_A = A(A^\top A)^{-1}A^\top,\;\; P_S = S(S^\top S)^{-1}S^\top$$
\(A,S\)의 각 행은 광원 \(E(\lambda)\)로 가중한다. \( 0\le\nu\le1 \)이며 \( \nu=1 \)은 루터 조건 만족. 함께 쓰는 '루터 잔차'는 \( \min_M \lVert M\mathbf s - \bar{\mathbf x}\rVert / \lVert\bar{\mathbf x}\rVert \)(광원 가중 최소자승의 상대 잔차)이다.

다른 하나는 색차 지표로, 시험 색 집합을 실제로 찍고 최적 행렬을 맞춘 뒤 남는 색차를 본다. ISO 17321-1(Colour characterisation of digital still cameras)의 감도 메타머리즘 지수 SMI는 이 계열로, 100에서 평균 색차의 5.5배를 빼는 형태 \( \mathrm{SMI} = 100 - 5.5\,\overline{\Delta E} \)로 정의된다. 시험 색 집합, 광원, 색차식 등 세부 조건은 규격 원문을 따라야 하므로, 아래 시뮬레이터의 값은 TCS01–08과 ΔE*ab로 계산한 SMI 형태의 근사로만 읽어라. SMI 100은 완벽, 실제 카메라는 대략 70–90대에 분포한다고 보고되어 왔다.

SIMULATOR

카메라 감도 설계기: 감도 vs 등색 함수, 최적 CCM, 색 오차

R / x̄G / ȳB / z̄실선 = 카메라(또는 M·s), 점선 = CMF
보기
프리셋
Vora–Trussell ν (D65)—
루터 잔차—
TCS 14색 ΔE00 평균 / 최대—
SMI 근사 (TCS01–08)—
노이즈 이득 R/G/B 행—
해볼 것: ① '넓은 대역'을 고르면 ν가 떨어지고 노이즈 이득이 3을 넘는다 — 겹침이 크면 색을 분리하려고 큰 뺄셈이 필요하다. ② '좁은 대역'은 노이즈 이득은 작지만 400–440 nm와 480–500 nm 같은 대역 사이 파장을 놓쳐 ΔE가 커진다. ③ 'M·s ≈ CMF' 보기에서 x̄의 청색 쪽 작은 봉우리가 어떻게 근사되는지 보라(B 채널을 R 행에 더해 만든다). ④ R 피크를 620 nm 이상으로 옮기면 x̄ 주 봉우리(약 600 nm)와 어긋나 오차가 커진다. 이 장의 다른 시뮬레이터는 모두 여기서 설계한 카메라를 쓴다. (CCM은 D65, TCS 14색, 백색 보존 최소자승)

기본 카메라는 \( \nu = 0.956 \), 루터 잔차 24.5%이며, 백색 보존 최소자승 CCM을 쓰면 TCS 14색의 평균 ΔE00이 1.18, 최대 4.58(TCS12, 진한 파랑)이다. 루터 잔차가 20%를 넘는데도 평균 ΔE00이 1 남짓인 것은 TCS 대부분이 매끄러운 저채도 반사율이라 메타머 블랙 성분이 작기 때문이다. 반대로 진한 파랑·빨강처럼 스펙트럼이 가파른 색과, 형광등·협대역 LED처럼 스펙트럼이 뾰족한 광원에서는 오차가 커진다. 감도 설계의 목표는 \(\nu\)를 1에 가깝게 하는 것이지만, 다음 절에서 보듯 그것만으로는 충분하지 않다. 노이즈도 함께 봐야 한다.

색 보정 행렬(CCM) 피팅

루터 조건이 깨진 카메라에서 할 수 있는 최선은 '대표 표면 집합에서 평균적으로 가장 잘 맞는' 3×3 행렬을 찾는 것이다. 이를 색 보정 행렬(color correction matrix, CCM)이라 한다. N개 학습 색에 대해 화이트 밸런스된 카메라 값 \( C \in\mathbb R^{3\times N} \)과 목표 XYZ \( T\in\mathbb R^{3\times N} \)을 모으면, 최소자승 해는 정규 방정식으로 바로 나온다.

$$M_{\mathrm{LS}} = \arg\min_M \lVert MC - T\rVert_F^2 = T\,C^\top\,(C\,C^\top)^{-1}$$
\( C C^\top \)는 3×3 그람 행렬. 행 \( i \)마다 독립인 선형 회귀 3개로 분해된다. 목표가 선형 sRGB라면 \( T \) 대신 \( M_{\mathrm{sRGB}}^{-1}T \)를 넣으면 되고, 해도 정확히 \( M_{\mathrm{sRGB}}^{-1}M_{\mathrm{LS}} \)가 된다(행별 선형성).

무제약 최소자승은 학습 색 전체의 오차 제곱합을 줄이지만 무채색 축을 보장하지 않는다. 화이트 밸런스 후 완전 백색은 \( \mathbf c=(1,1,1) \)인데, \( M_{\mathrm{LS}}\mathbf 1 \)이 D65 백색과 조금 다르면 모든 회색에 색 캐스트가 생긴다. 기본 카메라에서 무제약 해는 완전 백색을 ΔE00 2.4만큼 틀린다. 회색 오차는 사람이 가장 민감하게 알아채므로, 실무 CCM은 대개 백색 보존 제약 \( M\mathbf 1 = \mathbf w \)(선형 sRGB 출력이면 '행 합 = 1')을 건다. 라그랑주 승수로 풀면 닫힌 해가 있다.

$$\mathbf m_i = \mathbf m_i^{\mathrm{LS}} + \mu_i\,(CC^\top)^{-1}\mathbf 1,\qquad \mu_i = \frac{w_i - \mathbf m_i^{\mathrm{LS}}\!\cdot\mathbf 1}{\mathbf 1^\top (CC^\top)^{-1}\mathbf 1}$$
\( \mathbf m_i \): \(M\)의 \(i\)번째 행, \( \mathbf w = (X_w, Y_w, Z_w) \): 목표 백색(D65, \(Y_w=1\)). 제약 때문에 자유도는 9에서 6으로 줄고, 학습 오차는 조금 늘지만 회색은 정확해진다.

XYZ 공간의 제곱 오차는 지각 오차가 아니다. 어두운 색의 작은 XYZ 차이가 Lab에서는 크고, 밝은 노랑의 큰 XYZ 차이가 Lab에서는 작다. 그래서 세 번째 방법은 ΔE00 자체를 최소화하는 것이다. 목적 함수가 비선형이므로 반복법이 필요하다. 이 장의 구현은 백색 보존 해를 초깃값으로, 제약을 유지한 6개 자유도에 대해 수치 야코비안을 쓰는 레벤버그–마쿼트(Levenberg–Marquardt) 반복으로 \( \sum_n \Delta E_{00,n}^2 \)을 줄인다.

$$\min_{M:\,M\mathbf 1=\mathbf w}\;\sum_{n=1}^{N}\Delta E_{00}\big(\mathrm{Lab}(M\mathbf c_n),\,\mathrm{Lab}(\mathbf t_n)\big)^2,\qquad \mathbf p_{k+1}=\mathbf p_k-(J^\top J+\mu\,\mathrm{diag}J^\top J)^{-1}J^\top\mathbf r$$
SIMULATOR

CCM 피팅: 행렬과 패치별 오차 (위 = 기준, 아래 = 재현)

피팅 방법
학습 색 집합
CCM (WB 카메라 RGB → 선형 sRGB)
—
TCS 14 ΔE00 평균—
TCS 14 ΔE00 최대—
완전 백색 ΔE00—
학습 집합 ΔE00 평균—
노이즈 이득 RMS—
해볼 것: ① '최소자승'은 평균은 가장 작지만 완전 백색이 틀린다(행 합이 1이 아니다). ② 'ΔE00 최소화'는 평균은 비슷하고 최대 오차를 크게 줄인다 — 최악 패치에 가중이 실린다. ③ 학습을 '합성 60'으로 바꾸면 TCS는 시험 집합이 되어 일반화 성능을 본다. 견본은 D65, sRGB 표시이며 패치 아래 숫자는 ΔE00이다. 위 감도 설계기를 바꾸면 이 결과도 바뀐다.

기본 카메라, TCS 14색 학습 기준으로 세 방법을 비교하면 다음과 같다(평가도 TCS 14색, D65).

방법ΔE00 평균ΔE00 최대완전 백색 ΔE00선형 sRGB 행렬 R 행
무제약 최소자승0.913.392.36—
백색 보존 최소자승1.184.5802.284 −1.714 0.430
ΔE00 최소화 (LM, 백색 보존)1.142.9202.227 −1.709 0.483
공학자 관점: 학습 색 집합이 곧 사양이다

CCM은 학습 색 집합에 대해 최적일 뿐이다. 피부색이 중요하면 피부 반사율을, 제품 촬영이면 해당 재질을 학습 집합에 넣고 가중한다. 14색이나 24색처럼 적은 집합에 9개 계수를 맞추면 과적합 위험도 있다. 이 모델에서 TCS로 학습하고 합성 반사율 60개로 시험하면 평균 ΔE00이 0.75, 합성으로 학습하고 TCS로 시험하면 0.77로 비슷하게 나오지만, 실제 카메라와 실제 차트에서는 학습/시험 차트를 분리해 보고하는 것이 원칙이다(9절).

노이즈 증폭과 정규화 CCM

CCM은 색만 바꾸지 않는다. 각 채널의 노이즈도 같은 행렬로 섞인다. 화이트 밸런스된 카메라 채널의 노이즈가 서로 독립이고 분산이 \( \sigma_j^2 \)라면, 출력 채널의 노이즈 분산은 계수의 제곱으로 더해진다.

$$\sigma_{\mathrm{out},i}^2 = \sum_{j} m_{ij}^2\,\sigma_j^2 \;\;\xrightarrow{\;\sigma_j=\sigma\;}\;\; \sigma_{\mathrm{out},i} = g_i\,\sigma,\qquad g_i=\sqrt{\textstyle\sum_j m_{ij}^2},\qquad g_{\mathrm{rms}}=\sqrt{\tfrac13\textstyle\sum_{i,j} m_{ij}^2}$$
\( g_i \): 출력 \(i\) 행의 노이즈 이득(선형 sRGB 행렬 기준). 행 합이 1로 고정된 상태에서 비대각 성분이 음수로 커질수록 대각 성분도 커져 \( g_i \)가 1보다 커진다.

기본 카메라의 sRGB 행렬 R 행은 (2.284, −1.714, 0.430)이고 \( g_R=\sqrt{2.284^2+1.714^2+0.430^2}=2.89 \)다. 회색 패치에서 R 채널 노이즈가 2.9배가 된다는 뜻이다. 감도 곡선이 많이 겹칠수록(채널 간 상관이 클수록) 색을 분리하려면 큰 뺄셈이 필요하고, 그만큼 노이즈가 커진다. 색 정확도를 조금 포기하고 행렬을 단위행렬 쪽으로 당기면 노이즈를 줄일 수 있다. 이것이 정규화(릿지) CCM(ridge-regularized CCM)이다.

$$M_\lambda = \arg\min_M \lVert MC-T\rVert_F^2 + \lambda'\lVert M - M_0\rVert_F^2 = (TC^\top + \lambda' M_0)(CC^\top + \lambda' I)^{-1}$$
\( M_0 = M_{\mathrm{sRGB}} \): WB된 카메라 RGB를 그대로 선형 sRGB로 간주하는 행렬(출력 공간에서 단위행렬). \( \lambda' = \lambda\cdot\mathrm{tr}(CC^\top)/3 \)으로 스케일을 맞춰 \( \lambda \)를 무차원으로 쓴다. \(\lambda\to\infty\)이면 CCM을 끈 것과 같다.
WB 카메라 노이즈 σ σ σ ×2.28 ×(−1.71) ×0.43 R_out σ_R,out = √(2.28² + 1.71² + 0.43²) σ = 2.89 σ 행 합은 1(백색 보존)인데 제곱합은 8.3 → 신호는 그대로, 노이즈만 커진다 음수 계수(뺄셈)가 클수록 손해
그림 12-3. 신호는 계수의 합(행 합)으로, 독립 노이즈는 계수의 제곱합의 제곱근으로 전파된다. 큰 양수와 큰 음수가 짝을 이루면 회색 신호는 보존되면서 노이즈만 증폭된다.
SIMULATOR

노이즈 이득 vs 색 정확도: 릿지 CCM 트레이드오프

현재 CCM (선형 sRGB)
—
TCS 14 ΔE00 평균 / 최대—
노이즈 이득 R / G / B—
g_rms—
18% 회색 R 출력 노이즈—
해볼 것: ① λ를 −4에서 −2까지 올리면 g_rms는 조금 줄고 ΔE는 1 남짓 오른다. ② λ ≈ 10⁻¹이면 노이즈 이득이 거의 1이 되지만 평균 ΔE00이 5 근처로 커진다 — 색이 탁해진다(오른쪽 견본의 채도 저하). ③ σ를 키워 노이즈 견본을 보며, 저조도 모드에서 일부 카메라가 채도를 낮춘 CCM으로 바꾸는 이유를 생각해 보라. 곡선 위 점이 현재 λ다. (노이즈는 WB 후 채널 독립 가우시안, 고정 시드)
실무 메모: WB 이득도 노이즈 이득이다

여기서는 화이트 밸런스 후 채널 노이즈가 같다고 가정했다. 실제로는 원시 신호에서 노이즈가 결정되고 WB 이득이 곱해진다. 기본 카메라를 표준광 A(2856 K) 아래에서 쓰면 G=1 기준 WB 이득은 (R, G, B) = (0.76, 1, 2.22)로, B 채널 노이즈가 CCM 이전에 이미 2.2배가 된다. 그래서 전체 노이즈 이득은 \( M\,D \)(CCM × WB 대각 행렬)로 계산해야 하며, 텅스텐 조명의 저조도 사진에서 파란 얼룩 노이즈가 흔하다. 센서 쪽 SNR 분석은 SensorBook CFA와 SNR 트레이드오프를 참고하라.

화이트 밸런스: 센서 공간의 대각 이득

지금까지 CCM 입력을 '화이트 밸런스된 카메라 RGB'라고 했다. 화이트 밸런스(white balance, WB)는 장면 광원 아래 완전 백색이 만드는 카메라 응답 \( \mathbf w_{\mathrm{cam}} = (w_R,w_G,w_B) \)로 각 채널을 나누는 대각 행렬이다.

$$\mathbf c_{\mathrm{wb}} = D\,\mathbf c_{\mathrm{raw}},\qquad D=\mathrm{diag}\!\left(\frac{w_G}{w_R},\,1,\,\frac{w_G}{w_B}\right),\qquad \mathbf X_{\mathrm{D65}} \approx M\,D\,\mathbf c_{\mathrm{raw}}$$
G 이득을 1로 두는 것이 관례다(노출 기준 유지). \( M \)은 WB된 값을 D65 적응 XYZ(또는 선형 sRGB)로 보내는 CCM. 목표 XYZ는 장면 광원 아래 XYZ를 Bradford로 D65에 순응시킨 값이다(8장).

이것은 8장의 von Kries 순응과 같은 형태이지만, 대각 이득이 걸리는 공간이 원추세포 LMS나 Bradford의 '샤프닝된' 공간이 아니라 카메라 RGB 공간이라는 점이 다르다. 대각 순응은 감도가 좁을수록 잘 맞는다. 카메라 감도는 넓고 겹쳐 있으므로 센서 공간 대각 이득은 완벽한 색순응이 아니다. 회색은 정확히 회색으로 가지만(정의상), 유채색은 광원마다 조금씩 다르게 틀어진다. 이 잔차를 흡수하는 것이 다음 절의 광원별 CCM이다.

RAW흑 레벨·선형화 WB 이득D = diag 디모자이크(ISP) CCMM(CCT) XYZ장면 측색값 출력 공간sRGB / P3 행렬 톤·룩·OETF출력 참조 AWB: 광원 추정 → w_cam, CCT D와 M(CCT)을 함께 결정 장면 참조(scene-referred) 출력 참조(output-referred)
그림 12-4. 색 관점에서 본 카메라 파이프라인. WB는 센서 공간의 대각 이득이고 CCM은 그 뒤에 온다. 광원 추정(AWB)의 결과가 WB 이득과 CCM 선택을 동시에 결정한다. 노이즈 저감·디모자이킹 등 ISP 단계의 세부는 SensorBook ISP 장에서 다룬다.

왜 WB가 CCM보다 먼저인가? 세 가지 이유가 있다. 첫째, CCM은 WB된 데이터로 학습되었고 백색 보존 제약 \( M\mathbf 1=\mathbf w \)가 의미를 가지려면 회색이 \( (1,1,1) \)이어야 한다. 둘째, 센서 공간에서 회색을 먼저 맞추면 CCM의 오차가 무채색 축에 퍼지지 않는다 — 사람은 회색의 색 캐스트에 가장 민감하다. 셋째, 하이라이트 클리핑 처리, 디모자이킹의 색차 보간 등 이후 단계 다수가 '회색 = 채널 값이 같음'을 가정한다. 순서를 바꾸면(\( D\) 를 출력 공간에 적용) 수학적으로는 다른 3×3 행렬이 될 뿐이지만, 그 행렬은 광원마다 다시 학습해야 하므로 실익이 없다.

흔한 실수

① 감마 인코딩된 JPEG 값에 WB 이득을 곱한다: 이득은 반드시 선형 RAW 값에 곱해야 한다(6장). ② 클리핑된 하이라이트에 WB 이득을 곱한다: 포화된 채널(예: G)이 1에 묶인 상태에서 R·B에만 이득이 걸려 하이라이트가 분홍·자홍으로 변한다. ISP는 포화 픽셀을 별도로 처리한다. ③ 흑 레벨(블랙 오프셋)을 빼기 전에 WB를 한다: 어두운 영역의 색이 틀어진다.

광원 추정 알고리즘 (AWB)

WB 이득을 구하려면 \( \mathbf w_{\mathrm{cam}} \), 즉 장면 광원의 카메라 RGB를 알아야 한다. 사진 한 장만으로 이를 구하는 문제를 계산적 색 항상성(computational color constancy) 또는 광원 추정이라 한다. \( \mathbf c = \mathbf e \odot \boldsymbol\rho \)(광원 × 표면, 대각 모델)에서 \( \mathbf e \)와 \( \boldsymbol\rho \)를 동시에 모르므로 문제는 본질적으로 불량 설정(ill-posed)이고, 모든 알고리즘은 '장면에 대한 가정'으로 해를 고른다. 고전 알고리즘 다수는 van de Weijer·Gevers·Gijsenij의 일반식으로 묶인다.

$$\left(\int \left|\frac{\partial^{n} \mathbf c_\sigma(\mathbf x)}{\partial \mathbf x^{n}}\right|^{p} d\mathbf x\right)^{1/p} = k\,\hat{\mathbf e}$$
\( n \): 미분 차수, \( p \): 민코프스키 노름, \( \sigma \): 가우시안 평활. 채널마다 따로 계산한다. \(n=0,p=1\): Gray World, \(n=0,p=\infty\): White Patch(max-RGB), \(n=0,p=6\): Shades of Gray, \(n=1,p=1\): Gray-Edge.
알고리즘가정추정식잘 깨지는 장면
Gray World장면 평균 반사율은 무채색\( \hat{\mathbf e}\propto\mathrm{mean}(\mathbf c) \)잔디·하늘·단색 벽이 화면을 채울 때
White Patch (max-RGB)각 채널 최댓값은 백색(또는 정반사)에서 나온다\( \hat e_k=\max c_k \)흰 물체 없음, 클리핑, 노이즈 한 픽셀
Shades of Gray둘의 절충(밝은 색에 가중)\( \hat e_k=\big(\mathrm{mean}\,c_k^{p}\big)^{1/p} \)GW·WP 실패 요인이 겹칠 때
Gray-Edge경계(차분)의 평균은 무채색\( \hat e_k=\mathrm{mean}|\nabla c_k| \)경계가 적은 평탄한 장면, 단일 재질의 음영
색역 매핑 (Forsyth)정준 광원 아래 가능한 RGB 집합이 알려져 있다관측 색역을 정준 색역에 넣는 대각 사상의 집합 중 선택학습 색역 밖 재질, 계산량
학습 기반 (FFCC, FC4 등)데이터셋에서 광원 분포를 학습히스토그램·CNN 회귀학습 분포 밖 장면, 센서마다 재학습

평가 지표는 각도 오차(angular error)다. 광원 RGB의 크기(밝기)는 WB와 무관하므로 방향만 비교한다.

$$\theta = \arccos\frac{\hat{\mathbf e}\cdot\mathbf e}{\lVert\hat{\mathbf e}\rVert\,\lVert\mathbf e\rVert}$$
문헌에서는 데이터셋 전체의 평균·중앙값·최악 25% 평균을 함께 보고한다. 대략 1° 미만은 거의 구분되지 않고, 3°를 넘으면 회색의 색 캐스트가 눈에 띄기 시작한다는 것이 통상적인 감각이다.
SIMULATOR

WB 알고리즘 비교: 합성 몬드리안 장면과 각도 오차

장면 광원
장면 색 편향
표시할 보정
Gray World (현재 · 60장면 중앙값)—
White Patch—
Shades of Gray p=6—
Gray-Edge—
광원 CCT (McCamy)—
해볼 것: ① 표면 수를 2–4로 줄이면 모든 알고리즘이 흔들린다 — 장면 통계 가정은 표면이 많을 때만 성립한다. ② '녹색 우세'에서 Gray World는 마젠타 쪽으로 과보정한다(왼쪽 장면이 분홍빛). ③ '흰 패치 포함'이면 White Patch가 0°가 된다. 여기에 '조명 음영'을 켜면 흰 패치가 그늘에 있을 수 있어 다시 틀어진다. ④ 오른쪽 그림은 D65 백색으로 정규화한 카메라 rg 색도다: 점 = 장면 표면, 곡선 = 흑체 궤적(2000–10000 K), 링 = 정답 광원, 기호 = 각 추정. 왼쪽 장면은 선택한 추정으로 WB한 뒤 D65 CCM을 거친 sRGB 렌더링이다. 이 합성 반사율은 평균이 거의 무채색이 되도록 뽑으므로 '편향 없음'에서는 Gray World에 유리하다.

합성 장면에서도 경향은 분명하다. 기본 카메라, D65, 표면 48종·편향 없음일 때 60장면 중앙값은 Gray World 1.7°, Shades of Gray 1.5°이지만, 녹색 우세로 바꾸면 Gray World가 4.6°로 커지고 White Patch는 1.3°로 오히려 좋아진다. 표면이 4종뿐이면 어느 알고리즘이든 중앙값 5° 안팎이다. 실제 카메라의 AWB는 단일 가정에 의존하지 않고, 흑체·주광 궤적 근처로 해를 제한하는 사전 확률, 얼굴·하늘 검출, 노출 값(밝은 야외 = 주광일 확률 높음), 플리커 검출(형광등) 등을 결합한다. 학습 기반 방법의 대표 데이터셋으로 Gehler–Shi ColorChecker 데이터셋과 NUS 8-카메라 데이터셋이 쓰이며, 데이터셋이 센서마다 따로 있는 이유는 광원 RGB가 센서 공간 양이기 때문이다.

심화: 색역 매핑의 직관

Forsyth의 색역 매핑(gamut mapping)은 '정준 광원 아래에서 실제 표면이 만들 수 있는 RGB의 볼록 집합'을 미리 구해 둔다. 새 영상의 관측 RGB 집합이 그 안에 들어가도록 하는 대각 사상 \( D \)들의 집합(실현 가능 집합)을 구하고, 그중 하나(예: 체적 최대)를 고른다. 장면 통계가 아니라 '불가능한 색은 없다'는 제약을 쓴다는 점에서 GW·WP와 성격이 다르다. 2차원 색도 버전(Finlayson)이 계산량 때문에 자주 쓰였다.

광원별 CCM과 CCT 보간

WB를 완벽히 해도(정답 광원을 알아도) 하나의 CCM이 모든 광원에 맞지는 않는다. 앞 절에서 본 대로 센서 공간 대각 이득은 완벽한 색순응이 아니고, 광원 스펙트럼에 따라 카메라 메타머리즘의 양상도 달라지기 때문이다. 기본 카메라에서 D65로 학습한 CCM을 표준광 A 장면에 그대로 쓰면 TCS 평균 ΔE00이 1.08(A 전용 CCM)에서 4.91, 최대 11.1로 커진다.

그래서 카메라는 보통 두 광원(흔히 표준광 A와 D65)에서 CCM을 각각 교정하고, 추정 CCT에 따라 보간한다. Adobe DNG 규격이 이 구조를 표준화했다.

DNG 태그의미
CalibrationIlluminant1 / 2두 교정 광원(예: Standard light A, D65)
ColorMatrix1 / 2XYZ → 기준 카메라 원시 공간(WB 전) 행렬. 광원별
ForwardMatrix1 / 2WB된 카메라 RGB → XYZ(D50, PCS) 행렬. 카메라 무채색 (1,1,1)을 D50 백색으로 보낸다
AsShotNeutral촬영 시 추정된 무채색의 카메라 좌표(= WB 이득의 역수)
CameraCalibration1 / 2, AnalogBalance개체 편차 보정, 아날로그 이득

보간은 CCT의 역수(mired = 10⁶/T) 공간에서 선형으로 한다. 색도 변화가 CCT보다 역 CCT에 대해 훨씬 균일하기 때문이다(8장).

$$g = \frac{T^{-1}-T_2^{-1}}{T_1^{-1}-T_2^{-1}}\;\;(0\le g\le1\text{로 클램프}),\qquad M(T) = g\,M_1 + (1-g)\,M_2$$
\( T_1=2856 \) K(A), \( T_2=6504 \) K(D65). 예: \( T=4000 \) K이면 \( g=(250.0-153.8)/(350.1-153.8)=0.49 \). DNG에서는 AsShotNeutral로부터 CCT를 구하는 것과 CCT로 행렬을 보간하는 것이 서로 의존하므로 반복으로 수렴시킨다.
500 mired (2000 K) 100 mired (10000 K) A · M₁ 350 mired D65 · M₂ 154 mired 4000 K → 250 mired, g = 0.49 A보다 따뜻하면 M₁ 고정 D65보다 차가우면 M₂ 고정
그림 12-5. 두 교정 광원의 행렬을 역 CCT(mired) 축에서 선형 보간한다. 두 교정점 밖에서는 가까운 쪽 행렬을 쓴다. 보간은 CCT 한 변수만 보므로 같은 CCT라도 스펙트럼이 다른 광원(형광등, LED)의 차이는 반영하지 못한다.
SIMULATOR

광원 불일치: D65 CCM, A CCM, mired 보간, 전용 CCM

장면 광원
CCT · 보간 가중 g—
D65 CCM 평균 / 최대—
A CCM 평균 / 최대—
mired 보간 평균 / 최대—
전용 CCM 평균 / 최대—
해볼 것: ① 흑체 T를 2856 K에서 6500 K까지 움직이면 보간 CCM이 전용 CCM에 거의 붙어 따라간다 — 흑체·주광 계열 광원에는 2점 보간이 잘 맞는다. ② FL2, FL11, LED-B3처럼 CCT는 4000 K 부근이지만 스펙트럼이 뾰족한 광원에서는 보간 CCM과 전용 CCM의 차이가 커진다. ③ LED-RGB1은 CCT가 A와 비슷해(약 2840 K) 보간은 A CCM을 그대로 쓰지만, 세 개의 좁은 피크 때문에 ΔE가 크게 남는다. 모든 경우 WB는 정답 광원으로 했다(광원 추정 오차 없음). 평가: TCS 14색, 목표 = Bradford로 D65에 순응시킨 XYZ.

기본 카메라로 계산한 결과를 정리하면 다음과 같다(정답 WB, TCS 14색 평균 ΔE00).

장면 광원CCTD65 CCMA CCMmired 보간전용 CCM
A2858 K4.911.081.081.08
흑체 4000 K4009 K2.433.011.201.12
D505002 K1.344.011.031.04
FL24230 K3.313.001.820.89
FL114007 K3.642.641.920.78
LED-RGB12842 K5.532.832.831.16
공학자 관점

CCT 하나로 CCM을 고르는 방식은 '광원 = 흑체/주광 계열'이라는 가정 위에 있다. 휴대폰 카메라 튜닝에서는 그래서 CCM을 3–5개 광원(예: A, TL84 형광, CWF, D50, D65)에서 교정하고, 광원 추정기가 형광등 여부(Duv, 플리커)를 함께 판단해 행렬 세트를 고르기도 한다. 보간 축이 CCT만이면 같은 4000 K의 흑체와 FL11을 구분하지 못한다는 점을 기억하라.

RAW → XYZ → 출력 색공간, 톤 커브와 룩

CCM의 출력 XYZ는 장면 참조(scene-referred) 측색값이다. 장면의 상대 휘도를 그대로 담고 있어 백색 위로도 값이 있을 수 있고(정반사, 광원), 디스플레이 가멋 밖 색도 있다. 화면에 보여주려면 출력 공간으로 행렬 변환하고, 범위를 맞추고, 전달 함수로 인코딩해야 한다.

$$\mathbf v = \mathrm{OETF}\Big(\mathcal T\big(M_{\mathrm{out}}^{-1}\,M(T)\,D\,\mathbf c_{\mathrm{raw}}\big)\Big),\qquad M_{\mathrm{out}}\in\{M_{\mathrm{sRGB}},\,M_{\mathrm{P3}},\dots\}$$
\( M_{\mathrm{out}} \): 출력 공간의 RGB→XYZ 행렬(5장), \( \mathcal T \): 톤 매핑·가멋 매핑·'룩', OETF: sRGB 곡선 등(6장). 기본 카메라의 D65 백색 보존 CCM을 출력 기준으로 쓰면 선형 sRGB R 행은 (2.284, −1.714, 0.430), Display P3 R 행은 (1.849, −1.114, 0.265)다. 넓은 출력 공간일수록 비대각 성분이 작아진다.

여기서 두 목표가 갈린다. 측색적 정확 재현(colorimetric reproduction)은 출력 XYZ가 장면 XYZ와 같아지게 하는 것이고, 선호 재현(preferred reproduction)은 사람이 '좋다'고 느끼는 결과를 목표로 한다. 대부분의 소비자 카메라는 대비를 올리고(S자 톤 커브), 채도를 높이고, 피부·하늘·잔디를 선호 색 쪽으로 미세하게 옮긴다. 화면 휘도가 실제 장면보다 훨씬 낮고 주변 조건이 다르므로(9장), 측색적으로 같은 출력이 오히려 '밋밋하고 칙칙하게' 보이기 때문이다. 따라서 룩이 적용된 JPEG로 카메라의 색 정확도를 평가하면 안 된다. 정확도는 RAW→XYZ 단계에서, 룩은 그 뒤 별도 단계에서 평가하는 것이 원칙이다.

SIMULATOR

룩 적용: 대비·채도·노출이 ΔE00에 미치는 영향 (위 = 측색 기준, 아래 = 룩)

TCS 14 ΔE00 평균 / 최대—
평균 ΔL* / ΔC*ab—
sRGB 클리핑 패치 수—
해볼 것: ① 대비 1.0, 채도 1.0, 노출 0이면 ΔE00 = 0(측색 재현)이다. 거기서 출발해 대비 1.2, 채도 1.15의 흔한 '선명한' 룩만 줘도 평균 ΔE00이 몇 단위 생긴다 — 카메라 오차(약 1)보다 훨씬 크다. ② '카메라 CCM 오차 포함'을 켜면 룩 오차에 카메라 오차가 더해진다. 톤 커브: 18% 회색 기준 log₂ 공간 선형(\(Y'=0.18\cdot2^{\,c\log_2(Y/0.18)+EV}\)), 채도: OKLab a·b 배율, 색 정보는 D65·sRGB.
장면 참조 파이프라인

영화·VFX에서는 카메라 RAW를 먼저 장면 참조 공간(예: ACES2065-1, AP0 원색)으로 보내는 입력 변환(IDT)을 측색적으로 만들고, 룩과 출력 변환을 그 뒤에 분리해 둔다. 이 장의 CCM이 IDT의 핵심이다. 색 관리 파이프라인 전체는 16장, HDR 출력은 14장에서 다룬다.

측정 기반 검증과 보고

실제 카메라의 CCM은 분광 감도를 측정해 계산하거나(단색광기로 파장별 응답을 재는 방법), 컬러 차트를 촬영해 직접 맞춘다. ISO 17321-1은 두 접근을 모두 다룬다. 차트 기반 절차의 요점은 다음과 같다.

  1. 조명과 기하: 차트를 45°/0° 기하로 균일하게 조명한다(조도 균일도 수 % 이내, 정반사 회피). 광원의 분광 분포를 분광복사계로 측정해 둔다(11장).
  2. 기준값: 차트 패치의 반사율을 분광광도계로 측정하고, 측정한 광원 스펙트럼으로 기준 XYZ를 계산한다. 제조사 공칭값을 쓰면 차트 노화·로트 차이가 그대로 오차가 된다.
  3. RAW 처리: 흑 레벨 제거, 선형성 확인(노출 브래킷으로 응답 직선성 점검), 플랫필드(주변 감광·조명 불균일) 보정 후 패치 중앙 영역 평균. 포화 픽셀이 없어야 한다.
  4. 피팅: WB(회색 패치 기준) → 백색 보존 CCM 또는 ΔE00 최적화. 학습 차트와 시험 차트를 분리한다(예: ColorChecker Classic 24로 학습, ColorChecker Digital SG 140 또는 분광 데이터베이스 합성으로 시험).
  5. 보고: 평균·최대 ΔE00, 가능하면 90 백분위수, 회색 패치의 ΔC(색 캐스트)와 ΔL(톤)을 따로, 광원별로. 노이즈 이득(행렬 계수 또는 측정 SNR)도 함께.

이 장의 모델로 '측정'을 흉내 내면, 기본 카메라의 백색 보존 CCM은 D65에서 TCS 14색 평균 ΔE00 1.18 / 최대 4.58, 합성 반사율 60개로 시험하면 평균 0.75다. 같은 카메라가 정답 WB와 mired 보간 CCM을 써도 FL11 아래에서는 평균 1.92가 된다. 즉 보고서의 숫자는 시험 색 집합과 광원을 함께 적어야 의미가 있다. 결론을 하나의 수치 예로 고정하면: D65 아래 TCS01의 기준 Lab은 (61.5, 17.5, 11.9)이고, 기본 카메라 + 백색 보존 CCM의 재현은 ΔE00 0.35 이내로 이를 맞추지만, TCS12(진한 파랑)는 4.58 벗어난다.

흔한 보고 실수

① 학습한 차트로 평가해 놓고 '평균 ΔE00 1.5'라고 쓴다(과적합된 낙관치). ② 룩이 적용된 JPEG를 측정한다(정확도가 아니라 선호도를 잰 것). ③ 기준 XYZ를 D50으로, 재현을 D65 백색으로 계산하는 등 백색점을 섞는다 — 반드시 같은 기준 백색과 같은 순응 변환을 써야 한다. ④ ΔE76과 ΔE00을 섞어 비교한다.

핵심 정리

  1. 카메라 RGB와 XYZ는 같은 형태의 적분이지만 가중 함수가 다르다. 두 가중 함수 집합이 같은 부분공간을 펼칠 때(루터–아이브스 조건)만 3×3 행렬로 정확한 변환이 가능하다.
  2. 조건이 깨지면 카메라 메타머리즘이 생긴다. 카메라에는 같고 사람에게는 다른 표면 쌍(예: ΔE00 6.1)이 존재하며, 어떤 행렬로도 둘을 함께 맞출 수 없다. 지표: Vora–Trussell ν, 루터 잔차, SMI = 100 − 5.5·평균 ΔE.
  3. 최소자승 CCM \( M = TC^\top(CC^\top)^{-1} \)은 닫힌 해가 있다. 백색 보존 제약(행 합 유지)은 회색을 정확히 하고, ΔE00 직접 최소화(LM 반복)는 최대 오차를 줄인다.
  4. CCM 행 \(i\)의 노이즈 이득은 \( \sqrt{\sum_j m_{ij}^2} \)다. 감도가 겹칠수록 비대각 성분과 노이즈가 커지며, 릿지 정규화로 정확도와 노이즈를 맞바꾼다.
  5. WB는 센서 공간의 대각 이득이며 CCM보다 먼저 선형 RAW에 적용한다. 센서 공간 대각 이득은 완전한 색순응이 아니다.
  6. 광원 추정은 장면 가정에 의존한다: Gray World(평균 무채색), White Patch(최댓값 = 백색), Shades of Gray, Gray-Edge(경계 평균 무채색), 색역 매핑, 학습 기반. 평가는 각도 오차.
  7. 광원마다 최적 CCM이 다르다. DNG는 두 교정 광원의 행렬을 역 CCT(mired)로 선형 보간한다. 흑체·주광 계열에는 잘 맞지만 형광등·협대역 LED에는 잔차가 남는다.
  8. 측색 재현(장면 참조)과 선호 재현(룩)은 분리해 평가한다. 정확도 보고에는 시험 색 집합, 광원, 색차식, 학습/시험 분리를 명시한다.

확인 퀴즈

카메라 감도 \( \mathbf s(\lambda) \)가 루터–아이브스 조건을 만족한다는 것의 정확한 의미는?

조건은 '같은 부분공간'이다. 그러면 적분의 선형성으로 모든 스펙트럼에서 c = A·X가 되어 XYZ를 정확히 복원한다. 피크 위치가 같아도 모양이 다르면 조건을 만족하지 않는다.

두 표면이 카메라 RGB는 같지만 XYZ가 다르다. 이 상황에 대한 설명으로 옳은 것은?

같은 입력에 서로 다른 출력을 요구하므로 RGB의 어떤 함수(선형·비선형·LUT)로도 불가능하다. 이것이 카메라 메타머리즘이며, 감도 자체를 바꿔야만 줄어든다.

무제약 최소자승 CCM 대신 백색 보존 제약 \( M\mathbf 1 = \mathbf w \)을 거는 주된 이유는?

제약은 자유도를 줄여 학습 평균 오차는 오히려 약간 늘린다(이 장의 예: 0.91 → 1.18). 대신 사람이 가장 민감한 무채색 축이 정확해진다.

선형 sRGB CCM의 G 행이 (−0.17, 1.67, −0.50)일 때, WB 후 채널 노이즈가 같고 독립이라면 G 출력의 노이즈 이득은 약 얼마인가?

\( \sqrt{0.17^2+1.67^2+0.50^2}=\sqrt{0.029+2.789+0.25}\approx1.75 \). 신호는 행 합(=1)으로, 독립 노이즈는 제곱합의 제곱근으로 전파된다.

WB를 CCM보다 먼저(선형 RAW에) 적용하는 이유로 가장 거리가 먼 것은?

WB 이득은 선형 값에 곱해야 한다. 감마 인코딩된 값에 곱하면 밝기에 따라 다른 이득이 걸리는 셈이 되어 회색이 정확하지 않다.

잔디밭이 화면 대부분을 차지하는 장면에서 Gray World 추정의 전형적인 결과는?

장면 평균이 녹색이면 GW는 그 색을 광원 색으로 본다. 녹색을 '빼는' 보정이 들어가 전체가 마젠타(분홍)로 기운다. 시뮬레이터의 '녹색 우세'에서 확인할 수 있다.

광원 추정 평가에 RGB 차이 대신 각도 오차를 쓰는 이유는?

추정 RGB에 상수를 곱해도 WB 결과(이득 비)는 같다. 그래서 크기에 불변인 벡터 사이 각도를 쓴다. 단, 각도 오차는 센서 공간 양이라 카메라마다 의미가 조금 다르다.

DNG식 보간에서 교정 광원이 A(2856 K)와 D65(6504 K)일 때, 장면 CCT가 5000 K이면 A 행렬의 가중 g는 약 얼마인가?

\( g=(200-153.8)/(350.1-153.8)\approx0.24 \). CCT 자체로 선형 보간하면 (6504−5000)/(6504−2856) ≈ 0.41이 되어 다르다. DNG는 역 CCT(mired) 공간에서 보간한다.

제조사가 '평균 ΔE00 1.2'라고 보고했다. 이 숫자를 해석하는 데 가장 필요한 추가 정보는?

같은 카메라도 광원(예: D65 1.18 vs FL11 1.92)과 시험 집합에 따라 숫자가 크게 달라진다. 학습 차트로 평가하면 낙관치가 되고, 룩이 들어가면 정확도가 아니라 선호를 잰 것이다.