High-Dynamic-Range Imaging

Tone Mapping (HDR$\rightarrow$LDR display)

이미지는 HDR인데 디스플레이가 LDR이라면 어쩔 수 없이 LDR로 봐야 한다. 그런데 동시에 디테일도 보존하고 싶다. tone mapping은 비록 LDR의 이미지이지만, 그것을 보고 현실 세계같이 인지할 수 있도록 만들자는 것으로부터 시작한다.

먼저 사람의 눈이 다양한 범위에 대해 어떻게 인지하는지에 대해 알아야 한다. 사람의 눈은 대비에 민감하다. 즉, 1:2의 대비와 100:200의 대비를 같다고 인지한다. 또한 망막과 동공에서 빛을 수용할 수 있고, 신경$\cdot$화학적으로 수용할 수 있다. 그리고 공간적 주파수에 따라 민감도가 다르다.

Contrast Sensitivity Function (CSF)

scale=0.5 Source

위 그래프는 공간적 주파수에 따른 민감도 그래프이다. 초반에는 주파수가 로그함수로 높아지면 민감도가 올라가지만, 특정 지점 이후에는 급격히 줄어든다. 즉, 주파수가 매우 높으면 인지할 수 없다는 말이다. 따라서 출력하는 주파수를 피크점 이전까지로 해야 한다. 동시에 색상은 유지해야 한다.

Gamma Compression

만약 원본이 1:10000의 대비를 가지고 있고, 화면은 1:100의 대비를 가지고 있다면, 단순히 $x\rightarrow x^{\gamma}$를 이용해서 변환시킬 수 있다. (주파수가 로그로 증가할 때 선형 증가하므로, 우리는 지수함수를 써야한다)그러나 이렇게 하면 대비는 유지되지만, 색상 이상이 일어난다

Gamma Compression on Intensity

gamma compression on intensity은 이미지에서 intensity와 color 맵을 추출하여 이용하는 방법이다. 이렇게 하면 하면 색상은 유지되지만, 디테일이 블러된다. 그렇다면 고주파수는 그대로 두고, 저주파수의 대비를 줄이는 방법을 사용할 수 있다. 이미지에서 저주파수, 고주파수 맵과 color 맵을 이용하는데, 이러면 halo artifact가 생긴다. 이 현상은 주파수가 높은 경계 부분만 빛의 테두리가 나타나는 왜곡 현상이다.

Durand Bilateral Filtering

이 방법은 경계를 블러링 하지 않는 방법이고, non-linear한 방법이다. 이미지에서 large scale, detail, color 맵을 추출하여 이용한다.

우선 가우시안 필터링부터 시작한다. 가우시안 필터링은 가우시안 함수 모양의 마스크를 이미지에 컨볼루션하는 방법이다.

($J$는 결과 이미지, $f$는 가우시안 마스크, $I$는 이미지)

만약 $I$가 계단 모양 이미지였다면, 결과물 $J$는 블러되어 경계 부분이 경사진 모양으로 나타난다. 만약 우리가 이미지의 $x$지점($I(x)$)을 관찰한다고 하고, 그 점은 경계 부근이라고 하자. 그럼 가우시안 필터는 그 주변 픽셀들에 마스크를 씌워 결과$J(x)$를 낼 것인데, 경계의 반대 부분에 있는 픽셀을 $I(\xi)$라고 하자. 이 점 $I(\xi)$는 결과물 $J(x)$를 오염시킨다. (경계를 보존하지 않고 스무딩 시키므로)

이 때 차이 나는 intensity만큼 패널티 $g$를 준다.

($f$는 $x$와 $\xi$의 거리이고, $g$는 intensity의 차이, $k$는 이다.) 이 결과로는 경계는 스무딩 되지 않고 나머지 노이즈만 스무딩된 결과가 나오게 된다. 여기서 사용되는 필터가 Bilateral Filter이다.

이제 Durand Bilateral Filtering의 전체 과정을 설명할 수 있다.

  1. Input 이미지는 대비가 매우 높기 때문에 intensity와 color맵을 추출한다.
  2. intensity 맵은 Fast Bilateral Filter를 이용해 Large scale로 변환시킨다.
  3. Intensity에서 Large scale을 빼서 detail을 얻는다.
  4. 그 후 Large scale에서 대비를 줄여 이를 detail과 color 맵과 합쳐서 결과물을 만든다.

Fattal’s Gradient Domain HDR Tone-mapping Operator

이 방법의 절차는 다음과 같다.

  1. HDR 이미지에서 gradient를 구한다.
  2. 강한 gradient를 줄인다.
  3. 줄인 gradient에서 LDR 이미지를 재건한다.

먼저 gradient를 알아야 한다. 여기서의 gradient는 다인자 함수를 미분한 것이다. 예를 들어 $f(x, y)$의 gradient는

이다. 우리는 이미지를 가지고 하므로,

가 된다.

절차를 다시 설명해보면 이렇다.

  1. 우리가 HDR scanline을 가지고 있다고 생각해보자. (1차원)
  2. $H(x)$는 $I(x)$의 로그이다.
  3. $H(x)$의 변화율을 구한다. ($H’(x)$)
  4. $H’(x)$를 줄인다. $G(x) = H’(x)\Phi(x)$
  5. $I(x)$를 다시 재건한다. $I(x) = C + \int_0^xG(t)$
  6. 아까 로그를 씌웠으니 역인 지수함수를 씌워준다. $\exp(I(x))$

여기서 우리의 이미지는 2차원이므로, $G(x,y) = \triangledown H(x,y)\Phi(x,y)$를 써야 한다. 2차원으로 넘어오면서 생기는 또다른 문제점은, $G=\triangledown I$를 만족하는 $I$가 존재하지 않을수도 있다는 점이다. 따라서 우리는 적분을 직접 하는 대신,

를 최소화시키는 $I$를 구하면 되는데, 이때 이다.

가 Euler-Lagrange equation ()을 따른다고 해보자. 그러면 Poisson Equation을 얻을 수 있다.

($\triangle$은 라플라스 연산자)

이제 attenuation factor $\Phi$에 대해 알아볼 것이다. 우선 이미지 피라미드($H_0, H_1, \cdots, H_d$)를 만든다. $H_0$은 원본 이미지고 $H_d$는 가장 멀리서 본 이미지이다. 각 레벨 $k$에서 $\triangledown H_k$를 다음과 같이 정의한다.

각 레벨 $k$에서의 scaling factor $\phi_k(x,y)$는 다음과 같이 정의된다.

원본 이미지의 gradient attenuation Function $\Phi(x, y)$는 top-down 방식으로 $\phi_k(x,y)$에서부터 전파되어 계산된다.

($L$은 linear interpolation을 이용한 upsampling operator이다)

그다음은 color 계산법이다.

$L_{in}$과 $L_{out}$은 HDR compression 전과 후의 luminance이고, $s$는 채도를 조절한다.

Extra Reading

Poisson Reconstruction

원래 이미지 $f^* $가 있고, 모양을 흉내낼 이미지 $\mathbf{v}$(사실은 이미지가 아니고 vector field이다)가 있을 때, 원래 이미지 $f^* $에서 모양을 흉내내고 싶은 부분 $\Omega$(hole)를 뚫는다. 이 때 에러가 최소화되는 이미지 $f$를 찾는 방법이 poisson reconstruction이다.

with , $\partial\Omega$는 hole $\Omega$의 boundary

이 에러를 최소화하는 $f$를 찾으면 되는데, 이미지는 이산 함수이므로 우리는 이산 버전으로 최적화를 바꿔야 한다.

with , for all , where

우리는 모든 $p\in\Omega$에 대해 아래의 방정식을 풀면 된다.

는 $p$의 4방향 이웃 $N_p$의 cardinality를 의미한다.

이를 선형방정식으로 만들면,

라고 할 수 있는데, $A_p$는 $f$의 라플라시안을 의미하고, $b$는 boundary condition $f^* $에서 velocity field $v$의 값을 의미한다? 결국 이 식을 통해서 poisson equation $\triangle f=\text{div}\mathbf{v}$를 푼 것이다.


이번 내용은 수학이 너무 많이 나와서 어렵다…나중에 다시 봐야 할듯


Terms

bilateral : 쌍방의
attenuate : 줄이다
conservative : 보존되는