Chapter 09

ISP 파이프라인

센서가 내보내는 RAW는 어둡고, 초록빛이 돌고, 가장자리가 어둡고, 노이즈와 결함 픽셀이 섞인 흑백 모자이크입니다. 이것을 우리가 아는 "사진"으로 만드는 일련의 계산을 영상 신호 처리기(Image Signal Processor, ISP)가 합니다. 이 장에서는 각 단계를 직접 켜고 끄며 왜 그 단계가 필요한지, 어떤 수학이 들어 있는지 살펴봅니다.

ISP란 무엇인가

스마트폰 AP 안의 ISP는 초당 수억 픽셀을 처리하는 전용 하드웨어 파이프라인입니다. 센서에서 MIPI CSI-2로 들어온 RAW 데이터는 수십 개의 블록을 차례로 통과하며, 각 블록은 특정 물리적 결함을 되돌리거나 사람의 지각에 맞춰 신호를 변환합니다. 블록들은 데이터의 성격에 따라 세 영역으로 나뉩니다.

RAW 도메인 (베이어, 선형, 1채널) RGB 도메인 (선형, 3채널) 표시 도메인 (비선형, 8-bit, YUV) 센서RAW 10b ① BLC−64 DN ② DPCmedian ③ LSCgain map ④ 디모자이크1→3 ch ⑤ WBdiag ⑥ CCM3×3 ⑦ NR공간/시간 ⑧ 감마·톤OETF, LTM RGB→YUVBT.601/709 ⑨ 샤프닝USM on Y 스케일러크롭·리사이즈 JPEG/HEVC4:2:0 사진 📷 통계(히스토그램·패치 평균·초점값)는 여러 지점에서 추출되어 3A 알고리즘으로 간다.
그림 9-1. 대표적인 ISP 블록 순서. 실제 제품은 블록이 훨씬 많고(HDR 합성, 시간 NR, 색도 NR, 국소 톤 매핑, 얼굴 인식 기반 보정 등) 순서도 벤더마다 조금씩 다르다. 많은 ISP는 WB 게인을 디모자이크 전에 베이어 도메인에서 적용한다.

순서에는 이유가 있습니다. 선형성이 필요한 보정은 먼저, 비선형 변환은 나중에 합니다. 블랙 레벨, 쉐이딩, 화이트 밸런스, 색 보정은 모두 "광자 수에 비례하는 신호"라는 가정 위에서만 올바르게 동작하므로 감마보다 앞에 둬야 합니다. 결함 픽셀은 디모자이크가 이웃으로 퍼뜨리기 전에 제거해야 하고, 샤프닝은 노이즈를 먼저 줄인 뒤에 해야 노이즈를 키우지 않습니다.

RAW → JPEG 파이프라인 시뮬레이터

아래 시뮬레이터는 4장과 같은 절차적 장면에서 현실적인 RAW를 합성합니다. 텅스텐 조명(2800 K)의 색 편향, 센서의 분광 크로스토크 행렬, cos⁴ 비네팅과 색 쉐이딩, 64 DN 블랙 레벨 오프셋(10-bit, 최대 1023), 샷 노이즈 + 읽기 노이즈 2.5 e⁻, 핫/데드 픽셀, 베이어 샘플링이 모두 들어 있습니다. 위쪽 칩을 눌러 단계를 선택하고, 칩 오른쪽 스위치로 단계를 끄고 켜 보세요. "이 단계 결과 보기"를 누르면 그 단계 직후의 중간 결과를 볼 수 있습니다.

SIMULATOR

RAW → JPEG: 9단계 ISP 파이프라인

보고 있는 단계—
기준 영상 대비 PSNR—
컬러체커 평균 색 오차 (8-bit)—
WB 게인—
DPC 보정 픽셀—
포화 픽셀—
처리 시간—
해볼 것: ① BLC를 끄면 검은 영역이 회색으로 뜨고 그림자에 색이 낀다. ② DPC를 끄고 확대해 보면 흰 점·검은 점이 디모자이크로 번진 십자 무늬가 보인다. ③ LSC를 끄면 모서리가 어둡고 약간 청록빛이다. ④ WB를 끄면 텅스텐의 주황빛, 켠 채 "색온도 프리셋"에서 틀린 온도를 고르면 색 편향이 남는다. ⑤ CCM을 "단위"로 바꾸면 크로스토크로 채도가 빠진 색, "체커 최소자승"은 현재 조건에 맞춘 최적 행렬이다. ⑥ ISO를 3200으로 올리고 NR과 샤프닝을 조절해 보자. 기준 영상 = 같은 톤 곡선을 거친 이상적인 장면(노이즈·결함·색 편향 없음). 컬러체커 색 오차 = 24패치 평균색의 RGB 거리(8-bit) — CCM 비교에는 이 값이 더 적합하다.

RAW 도메인 보정: BLC · DPC · LSC

① 블랙 레벨 보정 (Black Level Correction)

빛이 전혀 없어도 센서 출력은 0이 아닙니다. 센서 설계자가 ADC 입력에 일부러 페디스털(pedestal, 블랙 레벨 오프셋)을 더해 두기 때문입니다. 이유는 노이즈입니다. 암흑에서 신호는 0 근처에서 ± 방향으로 흔들리는데, 오프셋이 없으면 음수 쪽이 ADC에서 0으로 잘려 평균이 위로 치우칩니다(바이어스). 64 DN 정도의 여유를 두면 노이즈 분포 전체가 보존되고, ISP가 정확한 평균을 빼 줄 수 있습니다.

오프셋 없음: 0에서 잘림 0 평균이 위로 치우침 오프셋 64 DN: 분포 보존 64 DN0 BLC: 64을 뺌 가로축: 암흑 픽셀의 디지털 값(DN), 세로축: 빈도
그림 9-2. 암흑 프레임 히스토그램. 페디스털 덕분에 음의 노이즈가 보존된다. 실제 센서는 차광된 OB(optical black) 픽셀 행으로 블랙 레벨을 프레임마다 측정한다.
$$x_{\text{norm}}=\frac{\mathrm{DN}-\mathrm{BL}}{\mathrm{WL}-\mathrm{BL}}\qquad(\mathrm{BL}=64,\ \mathrm{WL}=1023)$$
BL: 블랙 레벨, WL: 화이트 레벨(포화값). 결과는 0~1로 정규화된 선형 신호. BL을 빼지 않으면 모든 값에 약 0.06이 더해져 대비가 떨어지고, 뒤의 WB 게인이 이 오프셋에도 곱해져 그림자에 색이 낀다.

② 결함 픽셀 보정 (Defect Pixel Correction)

수천만 픽셀 중 일부는 암전류가 비정상적으로 큰 핫 픽셀이거나 반응이 없는 데드 픽셀입니다. 공장에서 위치를 측정해 OTP 메모리에 저장하는 정적 보정과, 프레임마다 이웃과 비교해 찾는 동적 보정을 함께 씁니다. 동적 DPC는 같은 색 이웃 8개(거리 2)의 범위를 벗어나는 픽셀을 이웃의 중앙값으로 바꿉니다.

$$\hat x = \begin{cases}\operatorname{median}(\mathcal N_8) & x>\max\mathcal N_8+\tau\ \text{또는}\ x<\min\mathcal N_8-\tau\\ x & \text{그 외}\end{cases}$$
중앙값은 평균과 달리 이상치 하나에 끌려가지 않는다. 임계값 \(\tau\)가 너무 작으면 별빛·가는 하이라이트 같은 진짜 디테일까지 지운다.

③ 렌즈 쉐이딩 보정 (Lens Shading Correction)

광축에서 각도 \(\theta\)만큼 떨어진 상점의 조도는 대략 \(\cos^4\theta\)로 줄어듭니다(자연 비네팅). 거리 증가(\(\cos^2\)), 동공의 겉보기 면적 감소(\(\cos\)), 비스듬한 입사(\(\cos\))가 곱해진 결과입니다. 여기에 마이크로렌즈의 주광선각(CRA) 불일치로 픽셀 효율이 떨어지고, 채널마다 정도가 달라 색 쉐이딩까지 생깁니다(5장).

θ 가장자리중심 렌즈(사출동)센서 cos⁴θ (상대 조도) LSC 게인 1/cos⁴θ 0°20°40° 1.00.5
그림 9-3. 자연 비네팅. 화각 끝(θ ≈ 37°)에서 조도가 중심의 약 40%로 떨어진다. LSC는 채널별 게인 맵(보통 17×13 격자를 쌍선형 보간)을 곱해 이를 되돌린다(게인 축은 1/2.5 배율).
$$E(\theta)=E_0\cos^4\theta,\qquad x'_c(i,j)=x_c(i,j)\cdot G_c(i,j),\quad G_c=\frac{1}{V_c(i,j)}$$
\(V_c\): 균일 광원(적분구)을 찍어 측정한 채널별 쉐이딩 맵. 게인이 2~3배까지 커지므로 모서리 노이즈도 같은 배율로 커진다 — 그래서 실무에서는 100% 보정 대신 약간 덜 보정하기도 한다.

디모자이크와 화이트 밸런스

디모자이크는 4장에서 자세히 다뤘습니다. ISP에서는 보통 MHC 계열 선형 필터에 방향 판정을 결합한 하드웨어 블록이 쓰입니다. 디모자이크가 끝나면 모든 픽셀이 (R, G, B) 세 값을 갖지만, 아직 카메라 고유의 RGB일 뿐입니다. 먼저 조명의 색을 제거해야 합니다.

사람의 시각은 조명이 바뀌어도 흰 종이를 흰색으로 느끼는 색 순응(chromatic adaptation)을 합니다. 카메라는 그렇지 않아서, 텅스텐 조명 아래 회색 물체를 찍으면 R이 G의 1.7배, B는 0.4배쯤 나옵니다. 화이트 밸런스는 각 채널에 게인을 곱해 중성색이 R = G = B가 되도록 합니다. 이것이 폰 크리스(von Kries) 모델, 즉 대각 행렬 변환입니다.

1.701.000.39 텅스텐 아래 회색의 카메라 RGB × diag(g) g = (0.59, 1, 2.56) 1.00 1.00 1.00 WB 후: 중성색 R = G = B
그림 9-4. 화이트 밸런스는 채널별 게인이다. G를 기준(1)으로 두고 R, B 게인만 조절하는 것이 일반적이다 — G의 SNR이 가장 좋아 증폭하지 않는 편이 유리하기 때문이다.
$$\begin{bmatrix}R'\\G'\\B'\end{bmatrix}=\begin{bmatrix}g_R&0&0\\0&1&0\\0&0&g_B\end{bmatrix}\begin{bmatrix}R\\G\\B\end{bmatrix},\qquad g_R=\frac{G_w}{R_w},\quad g_B=\frac{G_w}{B_w}$$
\((R_w,G_w,B_w)\): 장면 조명(흰색)의 카메라 응답. 이것을 어떻게 추정하느냐가 AWB 알고리즘의 핵심이다.

조명의 색 \((R_w,G_w,B_w)\)는 모르므로 추정해야 합니다. 가장 오래된 방법인 그레이 월드(gray world) 가정은 "장면 전체의 평균은 회색"이라고 보고 \(g_R=\bar G/\bar R\), \(g_B = \bar G/\bar B\)로 둡니다. 계산은 간단하지만 하늘·잔디처럼 한 색이 넓게 차지하면 틀립니다(시뮬레이터에서 수동/프리셋과 비교해 보세요). 화이트 패치(white patch / max-RGB)는 가장 밝은 영역을 흰색으로 가정합니다. 실제 AWB는 흑체 궤적 근처 후보만 고려하는 제약, 회색 후보 픽셀 선별, 얼굴·하늘 인식, 그리고 최근에는 신경망으로 조명을 추정합니다.

대각 모델의 한계

채널별 게인은 센서 분광 감도가 좁고 겹치지 않을 때만 정확하다. 실제 감도는 넓고 겹치므로, 조명이 바뀌면 WB만으로는 모든 색을 되돌릴 수 없고 CCM도 조명에 따라 바뀌어야 한다. 그래서 카메라는 2~3개 조명(예: 2856 K, 6500 K)에서 CCM을 교정해 두고 추정한 색온도에 따라 보간한다. 시뮬레이터의 "D65 교정" CCM은 6500 K에서만 정확하므로 텅스텐 장면에서는 약간의 오차가 남는다.

색 보정 행렬 (CCM)

WB 후 중성색은 맞췄지만, 유색은 여전히 틀립니다. 센서 분광 감도가 CIE 색 대응 함수의 선형 결합이 아니고(4장의 루터–아이브스 조건), 광학·전기적 크로스토크로 채널이 섞이기 때문입니다. 이것을 3×3 행렬 하나로 근사 보정하는 것이 CCM입니다.

$$\mathbf{t}\approx M\mathbf{c},\qquad M^\star=\arg\min_M\sum_{k=1}^{24}\left\|M\mathbf c_k-\mathbf t_k\right\|^2 = T C^\top\left(C C^\top\right)^{-1}$$
\(\mathbf c_k\): 컬러체커 \(k\)번 패치의 카메라 RGB(WB 후), \(\mathbf t_k\): 그 패치의 목표 선형 sRGB. \(C, T\)는 이 벡터들을 열로 쌓은 3×24 행렬. 정규방정식 \(M C C^\top = T C^\top\)에서 나온다.

이 최소자승 해를 구하는 과정이 바로 카메라 색 교정(color calibration)입니다. 실무에서는 몇 가지를 더 고려합니다. (1) 행 합 = 1 제약: 흰색이 흰색으로 남도록 각 행의 합을 1로 고정한다(라그랑주 승수 또는 한 열을 소거). (2) 지각 오차 최소화: RGB 제곱 오차 대신 CIELAB의 \(\Delta E\)를 최소화한다(비선형 최적화). (3) 노이즈 증폭: 출력 노이즈는 \(\sigma_{\text{out},i}^2=\sum_j M_{ij}^2\sigma_j^2\)이므로 비대각 성분이 큰 행렬은 색을 정확히 하는 대가로 노이즈를 키운다. 저조도에서 CCM 채도를 일부러 줄이는 이유입니다.

시뮬레이터로 확인하기

파이프라인 시뮬레이터에서 ⑥ CCM 칩을 선택하고 "체커 최소자승"을 누르면, 현재 WB 결과에서 24패치 평균을 뽑아 위 식으로 행렬을 즉석 계산한다. 크로스토크 모델 \(X\)의 역행렬("D65 교정")과 비교해 보자. 행렬 원소를 직접 고쳐 볼 수도 있다(예: 대각을 키우고 비대각을 더 음수로 → 채도 증가).

노이즈 저감과 샤프닝

노이즈 저감(NR)은 "신호는 공간적으로 매끄럽고, 노이즈는 픽셀마다 독립적"이라는 가정을 이용합니다. 가장 간단한 가우시안 필터는 이웃을 거리 가중 평균해 노이즈 표준편차를 줄이지만 에지도 똑같이 흐립니다. 바이래터럴 필터(bilateral filter)는 거리뿐 아니라 밝기 차이로도 가중치를 줘서 에지를 넘어가는 평균을 막습니다.

$$\hat I(\mathbf p)=\frac{1}{W_{\mathbf p}}\sum_{\mathbf q\in\Omega}\exp\!\left(-\frac{\|\mathbf p-\mathbf q\|^2}{2\sigma_s^2}\right)\exp\!\left(-\frac{\left(I(\mathbf p)-I(\mathbf q)\right)^2}{2\sigma_r^2}\right)I(\mathbf q)$$
\(\sigma_s\): 공간 범위, \(\sigma_r\): 밝기(범위) 허용치, \(W_{\mathbf p}\): 가중치 합. 시뮬레이터는 휘도의 제곱근(분산 안정화 근사) 차이로 범위 가중치를 계산해, 신호에 비례하는 샷 노이즈에서도 σr 하나로 밝은 곳과 어두운 곳을 비슷하게 다룬다.

샤프닝은 반대로 고주파를 키웁니다. 대표적인 언샤프 마스크(unsharp mask, USM)는 원본에서 흐린 버전을 뺀 "디테일"을 다시 더합니다.

$$Y_{\text{sharp}} = Y + a\,\big(Y - G_{\sigma} * Y\big)$$
\(a\): 양(amount), \(G_\sigma\): 가우시안 블러(반경). 색 번짐을 피하려고 보통 휘도(Y)에만 적용하고, 작은 차이는 무시하는 임계값(코어링)을 둔다.

USM은 고주파 이득이 \(1+a\)인 필터이므로, 노이즈가 남아 있는 상태에서 먼저 샤프닝하면 노이즈도 \(1+a\)배로 커지고 공간적으로 뭉쳐 "지글거리는" 입자가 됩니다. 그 뒤의 NR은 이미 커진, 에지처럼 보이는 노이즈 덩어리를 신호로 착각해 잘 지우지 못합니다. 그래서 NR → 샤프닝 순서가 원칙입니다.

SIMULATOR

NR과 샤프닝의 순서 (ISO 1600)

영역
평탄 패치 노이즈 σ (NR 전)—
σ: NR→샤프 / 샤프→NR—
PSNR: NR→샤프 / 샤프→NR—
σ는 중간 회색 패치(8-bit 단위, G 채널)의 표준편차. 같은 NR·샤프닝 파라미터라도 순서만 바꾸면 결과가 달라진다. 샤프닝 양을 키울수록 차이가 커진다.

감마와 톤 매핑

여기까지의 신호는 광자 수에 비례하는 선형 값입니다. 그런데 사람의 밝기 지각은 대략 로그(또는 1/3 거듭제곱)에 가깝습니다. 선형 값을 그대로 8-bit로 저장하면 어두운 영역에 코드가 턱없이 모자라고 밝은 영역에는 남아돕니다. 그래서 저장·전송 전에 비선형 전달 함수(OETF)를 적용합니다. sRGB 표준의 인코딩 곡선은 다음과 같습니다.

$$V=\begin{cases}12.92\,L & L\le 0.0031308\\ 1.055\,L^{1/2.4}-0.055 & L>0.0031308\end{cases}$$
\(L\): 선형 값(0~1), \(V\): 인코딩 값(0~1, ×255 → 8-bit). 원점 근처의 선형 구간은 기울기가 무한대가 되는 것을 막아 노이즈 증폭을 제한한다. 전체적으로 감마 약 2.2에 해당한다.
18% 회색 → 118/255 선형 입력 L 인코딩 V 01 8-bit 코드가 스톱마다 몇 개? 스톱선형 8-bitsRGB 8-bit 1 (최상위)12867 26451 33238 41628 5821 6416 7212 감마 인코딩은 코드를 어두운 스톱으로 재분배한다.
그림 9-5. sRGB OETF(파랑)와 선형(점선). 18% 반사율 회색이 코드 중간 부근(118)에 놓인다. 오른쪽 표는 8-bit에서 밝기 한 스톱(2배)마다 배정되는 코드 수.

감마 곡선 위에 톤 커브를 더해 사진의 "룩"을 만듭니다. S자 곡선은 중간톤 대비를 올리고 암부·명부를 부드럽게 압축합니다. 센서의 다이내믹 레인지(12~14 스톱)가 디스플레이(약 8 스톱)보다 넓을 때는 하이라이트를 부드럽게 눌러 주는 전역 톤 매핑(예: Reinhard \(L/(1+L)\))이나, 영역마다 다른 곡선을 쓰는 국소 톤 매핑(LTM)을 씁니다. 파이프라인 시뮬레이터의 ⑧ 단계에서 곡선 모양을 직접 확인해 보세요. 구의 반사 하이라이트가 Reinhard에서 어떻게 달라지는지도 눈여겨보세요.

RAW 파일(DNG)과 비트 깊이

JPEG는 ISP의 모든 결정(WB, CCM, 톤, NR, 샤프닝)이 "구워진" 8-bit 결과입니다. 반면 RAW 파일은 BLC조차 하지 않은 센서 데이터를 10~14-bit 그대로 저장하고, 나중에 PC에서 다른 결정을 내릴 수 있게 필요한 메타데이터를 함께 담습니다. Adobe의 DNG(Digital Negative)는 TIFF 기반의 공개 RAW 규격으로, 스마트폰의 "Pro/RAW" 모드도 대부분 DNG를 씁니다.

DNG (TIFF 컨테이너) 헤더 · IFD 체인 메타데이터: CFAPattern, BlackLevel,WhiteLevel, ColorMatrix1/2, AsShotNeutral… RAW 데이터 (12-bit, 무손실 압축) 미리보기 JPEG RAW 현상기가 하는 일 · BlackLevel/WhiteLevel로 ① BLC·정규화 · OpcodeList의 GainMap으로 ③ LSC · CFAPattern대로 ④ 디모자이크 · AsShotNeutral로 ⑤ WB (사용자가 변경 가능) · ColorMatrix1/2(2개 조명) 보간 → ⑥ CCM · 톤·NR·샤프닝은 현상기의 선택
그림 9-6. DNG의 구성. 핵심 태그는 센서의 "물리"를 기술하고, 사진의 "해석"은 현상 소프트웨어에 맡긴다.

비트 깊이가 왜 중요할까요? ADC 비트 수 \(n\)은 표현 가능한 최대 명암비 \(2^n\)을 정합니다(12-bit ≈ 72 dB, 14-bit ≈ 84 dB). 선형 RAW에서는 가장 밝은 스톱이 전체 코드의 절반을 차지하고 한 스톱 어두워질 때마다 코드가 절반으로 줄어듭니다. 12-bit RAW라도 10스톱 아래에는 4개 코드만 남습니다. 그러나 이 영역은 대개 노이즈가 코드 간격보다 커서(디더링 효과), 적절한 비트 수는 양자화 간격 ≲ 읽기 노이즈가 되도록 고릅니다.

$$\sigma_q=\frac{\Delta}{\sqrt{12}},\qquad \Delta = \frac{\text{풀웰}}{2^n}\ [\mathrm{e^-/DN}]$$
예: 풀웰 6000 e⁻, 10-bit → Δ ≈ 5.9 e⁻/DN, σq ≈ 1.7 e⁻로 읽기 노이즈 2.5 e⁻와 비슷하다. 게인(ISO)을 올리면 Δ가 줄어 같은 비트 수로도 암부를 더 세밀하게 표현한다.

12-bit 선형 데이터를 8-bit 파일로 만들 때는 반드시 감마를 먼저 적용하고 양자화해야 합니다. 선형 8-bit로 자르면 암부에 코드가 몇 개밖에 없어, 나중에 밝기를 조금만 올려도 계단 같은 밴딩(banding, posterization)이 드러납니다.

SIMULATOR

비트 깊이 × 인코딩 방식과 암부 밴딩

10번째 스톱 코드 수 (선형)—
10번째 스톱 코드 수 (감마)—
최대 명암비 20log₁₀(2ⁿ−1)—
위 두 띠는 선형 밝기 0 ~ 1/16(가장 어두운 4스톱) 구간의 매끈한 그라디언트를 각 방식으로 양자화한 뒤 암부를 끌어올려 표시한 것이다. 8-bit 선형은 뚜렷한 계단이 보이지만 8-bit 감마는 훨씬 매끈하다. 비트 수를 12로 올리면 선형도 매끈해진다 — RAW가 12-bit 이상 선형으로 저장되는 이유다.

3A: 자동 노출 · 자동 화이트 밸런스 · 자동 초점

ISP는 한 장을 처리하는 데서 끝나지 않고, 매 프레임의 통계를 보고 다음 프레임의 촬영 조건을 정합니다. 이 피드백 제어를 통틀어 3A라고 합니다. AE는 노출 시간과 아날로그/디지털 게인을, AWB는 WB 게인과 CCM을, AF는 렌즈 액추에이터(VCM) 위치를 조절합니다.

렌즈 + 센서노출·게인·초점 ISP영상 처리 AE히스토그램·평균 AWBR/G, B/G 격자 AF대비·위상차 출력프리뷰·사진 RAW 통계 노출 시간 · 게인 VCM 렌즈 위치 WB 게인 · CCM
그림 9-7. 3A 제어 루프. ISP 하드웨어가 격자별 통계를 뽑고, 소프트웨어(3A 알고리즘)가 다음 프레임의 센서·렌즈·ISP 파라미터를 결정한다. 한 번에 수렴하지 않고 여러 프레임에 걸쳐 부드럽게 수렴시켜 프리뷰가 깜박이지 않게 한다.

AE의 기본 목표는 장면의 평균 반사율이 약 18%라는 가정 아래, 측광 영역의 평균 휘도를 18% 회색(sRGB 약 118/255)에 맞추는 것입니다. 로그 영역에서 비례 제어를 하면

$$\mathrm{EV}_{n+1}=\mathrm{EV}_n + k\,\log_2\!\frac{Y_{\text{target}}}{\bar Y_n},\qquad 0\(\bar Y_n\): \(n\)번째 프레임의 측광 휘도(선형), \(k\): 수렴 속도(작을수록 부드럽지만 느림). 포화된 영역은 실제 밝기를 알 수 없으므로 과노출 시에는 큰 폭으로 줄인다.

평균 측광은 역광에서 실패합니다. 밝은 하늘이 평균을 끌어올려 피사체가 어둡게 찍히죠. 그래서 중앙 중점 측광, 얼굴 우선 측광, 하이라이트 보호(상위 백분위가 포화되지 않도록 제한) 같은 전략을 섞습니다. AWB는 WB 절에서 본 조명 추정을 매 프레임 돌리며, AF는 영상 대비(콘트라스트 AF)나 듀얼 픽셀의 위상차(PDAF, 10장)를 이용해 초점을 찾습니다.

SIMULATOR

AE 수렴: 18% 회색 목표의 반복 노출 조정

장면
측광 방식
현재 노출—
측광 휘도 (선형)—
포화 픽셀—
조정 횟수—
4프레임/초로 AE가 돈다. 히스토그램의 주황 선 = 목표 휘도의 sRGB 위치. 해볼 것: ① k = 1이면 한 번에 가지만 포화 영역 때문에 흔들릴 수 있다. ② "역광"(하늘이 9배 밝음)에서 평균 측광은 구와 체커를 어둡게 만든다 — 중앙 중점으로 바꿔 보자. ③ 하이라이트 보호는 포화를 줄이는 대신 전체가 어두워진다.

컴퓨테이셔널 포토그래피

작은 스마트폰 센서가 큰 카메라에 근접한 화질을 내는 비결은 한 장이 아니라 여러 장을 찍어 계산으로 합치는 데 있습니다. 셔터를 누르기 전부터 ZSL(zero shutter lag) 버퍼에 프레임을 계속 쌓아 두고, 짧은 노출 프레임 여러 장을 정렬·병합하면 흔들림 없이 긴 노출과 같은 광량을 얻습니다. \(N\)장을 평균하면 노이즈는 \(1/\sqrt N\)로 줄어, 8장이면 SNR이 약 9 dB 좋아집니다. 이것이 야간 모드의 원리이며, 노출이 다른 프레임을 합치면 HDR이 됩니다(8장).

RAW 버스트N × 짧은 노출 정렬타일 움직임 추정 강건 병합고스트 제거 ISP / AI 톤 매핑σ ∝ 1/√N RAW 도메인에서 합치면 디모자이크 전에 노이즈를 줄여, 위색과 노이즈 증폭을 함께 막는다.
그림 9-8. 멀티프레임 합성의 흐름(HDR+, 야간 모드 계열). 흔들린 프레임이나 움직이는 피사체 영역은 병합 가중치를 낮춰 고스트를 막는다.

최근에는 ISP 블록 일부 또는 전체를 신경망으로 대체하는 AI ISP가 확산되고 있습니다. 디모자이킹과 노이즈 제거를 하나의 네트워크로 동시에 푸는 공동 디모자이킹(joint demosaicking & denoising), 장면 인식 기반 AWB, 멀티프레임 초해상도, 얼굴·하늘 영역별 톤 조절이 대표적입니다. 신경망은 이 장에서 본 수작업 가정(그레이 월드, 매끄러운 색차 등)을 대량의 데이터로 학습한 사전 지식으로 바꿉니다. 다만 모바일 NPU의 전력·지연 제약 때문에, 실제 제품은 고정 하드웨어 블록과 신경망을 섞어 쓰는 하이브리드 구조가 일반적입니다.

핵심 정리

  1. ISP는 RAW 도메인(BLC → DPC → LSC) → RGB 도메인(디모자이크 → WB → CCM → NR) → 표시 도메인(감마·톤 → 샤프닝 → 압축) 순서로 처리한다. 선형성이 필요한 보정은 비선형 변환보다 앞에 둔다.
  2. 블랙 레벨(페디스털)은 음의 노이즈를 보존하려고 일부러 더한 오프셋이며, \( (\mathrm{DN}-\mathrm{BL})/(\mathrm{WL}-\mathrm{BL}) \)로 정규화한다. 빼지 않으면 대비 저하와 그림자 색 편향이 생긴다.
  3. 결함 픽셀은 디모자이크 전에 같은 색 이웃의 중앙값으로 바꾸고, 렌즈 쉐이딩(\(\cos^4\theta\) + 색 쉐이딩)은 채널별 게인 맵으로 되돌린다.
  4. 화이트 밸런스는 폰 크리스 대각 게인 \(g_R=G_w/R_w,\ g_B=G_w/B_w\)이며, 조명 추정(그레이 월드 등)이 핵심이다. CCM은 컬러체커로 \(M=TC^\top(CC^\top)^{-1}\)을 구하고, 계수가 클수록 노이즈를 증폭한다.
  5. NR은 샤프닝보다 먼저 한다. USM은 고주파 이득 \(1+a\)로 남은 노이즈까지 키우기 때문이다.
  6. sRGB OETF(선형 구간 + 1/2.4 거듭제곱)는 지각에 맞게 코드를 암부로 재분배한다. 선형 8-bit 양자화는 밴딩을 만들므로 RAW는 12-bit 이상 선형, 최종 JPEG는 8-bit 감마로 저장한다.
  7. 3A는 매 프레임 통계로 노출·WB·초점을 피드백 제어한다. AE는 로그 영역 비례 제어로 18% 회색 목표에 수렴하며, 측광 방식이 역광 결과를 좌우한다.

확인 퀴즈

센서 설계자가 ADC 출력에 64 DN 같은 블랙 레벨 오프셋을 일부러 더하는 주된 이유는?

노이즈는 ± 양쪽으로 흔들린다. 오프셋이 없으면 음수 쪽이 잘려 평균이 올라가고(바이어스) 저조도 색·밝기가 틀어진다. ISP가 OB 픽셀로 측정한 블랙 레벨을 정확히 빼면 분포가 보존된다.

텅스텐 조명에서 회색 패치의 카메라 RGB가 (0.68, 0.40, 0.16)으로 측정되었다. G를 기준으로 한 WB 게인 \( (g_R, g_B) \)는?

\(g_R = G/R = 0.40/0.68 \approx 0.59\), \(g_B = G/B = 0.40/0.16 = 2.5\). B 게인이 크므로 텅스텐 조명 사진은 파란 채널 노이즈가 두드러진다.

컬러체커 24패치로 CCM을 최소자승 추정할 때 \(M\)의 식으로 옳은 것은? (\(C\): 카메라 RGB 3×24, \(T\): 목표 3×24)

\(\|MC-T\|_F^2\)을 \(M\)으로 미분해 0으로 두면 정규방정식 \(MCC^\top = TC^\top\)이 나오고, 따라서 \(M = TC^\top(CC^\top)^{-1}\). 행 합 = 1 같은 제약을 추가하기도 한다.

노이즈 저감을 샤프닝보다 먼저 하는 이유로 가장 적절한 것은?

USM은 \(Y + a(Y - G*Y)\)로 고주파를 증폭한다. 노이즈는 대부분 고주파이므로 먼저 샤프닝하면 노이즈가 커지고 공간적으로 뭉쳐 NR이 제거하기 어려워진다.

AE가 \(\mathrm{EV}_{n+1}=\mathrm{EV}_n + k\log_2(Y_t/\bar Y_n)\)로 동작한다. 목표 18%, 현재 측광 휘도 4.5%, \(k=0.5\)이면 다음 프레임 노출 변화는?

\(\log_2(18/4.5) = \log_2 4 = 2\) EV 부족이고, \(k = 0.5\)이므로 이번 프레임에서는 절반인 +1 EV만 올린다. 다음 프레임에 남은 1 EV의 절반을 또 올리며 지수적으로 수렴한다.