Alpha Estimation in Natural Images
[cite]10.1109/CVPR.2000.855793[/cite]
문체가 난해하여 이해가 너무 힘들었기 때문에 나름의 방법으로 설명한 부분이 많습니다 양해 부탁드립니다.
1. Introduction
이미지 기반의 렌더링 기술 중 하나는 한 이미지에 있는 물체를 추출해서 다른 이미지로 옮기는 것입니다. 정확하게 물체를 추출하면 이러한 작업이 완벽하게 이루어지겠지만 카메라의 해상도는 한계가 있기 때문에 머리카락이나 나뭇잎 같이 픽셀보다 물체가 작아져버리면 픽셀단위로는 표현하기가 힘들어져버립니다. 이러한 부분은 에지나 segmentation 알고리즘 또한 제대로 작동하지가 않습니다.
이 논문에서는 이러한 문제를 다루는 방법을 이야기하고 있습니다. 일단 픽셀을 배경이나 물체 중 하나로 할당을 시킵니다. 만약 위에서 말한 것과 같이 두 물체 이상이 포함되어버린 픽셀이 나타나면, 한 물체에서 받은 색깔만을 할당하고 투명도를 주고자 합니다. Alpha 값이라고 부르는 퍼센트 값입니다.
2. The history of alpha estimation
3. Object and boundary regions
앞에서 말 한대로 이미지를 fourground와 background의 2개의 영역으로 제한하고자 합니다. 영역은 두 부분으로 구분하지만 실제로는 제 3의 영역이 존재합니다. 두 영역 사이의 완충 영역입니다.
저자는 두가지 방법을 예로 들고 있는데, 만약 사용자 입력을 통하여 fourground와 background를 구분 짓게 해주는 선을 미리 입력 받았다면 이 선 중심으로 일정 영역을 확장하여 완충 영역을 구할 수 있습니다.
선을 입력 받지 않고서는, fourground와 background임이 확실한 영역을 brush를 통하여 입력받는 방법 또한 제시되고 있습니다.
4. Estimating alpha
4.1 Building a manifold in color space
투명도 값은 foreground와 background 사이의 컬러 분포들을 구하고 둘 간의 연결을 통해 계산됩니다.
먼저 완충 영역의 중심에 위치하는 foreground, background를 구분하는 픽셀 체인을 일정한 길이로 나눕니다. 각 길이는 완충 영역을 구하기 위해 확장한 길이의 3배를 사용합니다. 나눠진 각 위치에 anchor point를 할당하고이들 anchor point에 Voronoi diagram 알고리즘을 적용하여 완충 영역을 여러 조각으로 나눌 수 있습니다.
나눠진 각 조각이 투명도를 계산하는 한 단위로 사용됩니다. 이제 그 알고리즘을 이야기해보겠습니다.
하나의 조각에는 anchor point가 하나씩 존재합니다. anchor point를 중심으로 하는 주변 사각 영역을 정의합니다. 이 영역은 완충 영역 조각을 모두 포함하여야 하고 그 주변 background와 foreground 영역 또한 포함하여야 합니다.
사각 영역내에서 background, foreground 영역에서 Orchard, Bouman 방법을 이용하여 color quantization 알고리즘을 수행하면, 서로 같은 색으로 quantization 된 영역에 대하여 quantization 된 색상과, 원래 색상의 분산, 그리고 영역 내에서 차지하는 가중치를 계산할 수 있습니다. background와 foreground에서의 이 분포들을 각각 $ X = \{ (x_j, \mathbf{u}_j, \sigma^2_{\mathbf{u_j}}) \} ( j = 1, ..., M ) $, $ Y = \{ (y_k, \mathbf{v}_k, \sigma^2_{\mathbf{v_k}}) \} ( k = 1, ..., N ) $ 로 표현합니다. 따라서 두 영역은 각각 M, N개의 색으로 quantization 되었음을 알 수 있습니다.
완충 영역 내 픽셀들의 투명도는 이들 두 분포들의 연결, M * N 개의 연결 쌍을 구성하고 이들을 통해 계산됩니다. 하지만 quantization된 색에 따라 이들 연결들 중 일부가 충돌을 일으킬 수 있습니다. 두 연결이 서로 교차하거나, 각도가 매우 작은 경우입니다. 이런 경우에는 한가지 연결 쌍을 무시하여야 합니다. 여기서는 간단하게 M * N의 연결 쌍 중 그 길이가 작은 것들부터 허용 목록에 추가하다가 충돌나는 것이 생기면 그 연결은 무시하여 사용하지 않도록 하는 것으로 충돌을 방지합니다. 이후 허용 목록이 완성되었을 대 사용되지 않은 분포가 있다면 가중치를 재 계산하여 줍니다.
이렇게 완성된 연결 쌍 $ (j, k) $들을 인덱스 $i = 1, ..., n $를 이용하여, $ J(i) = j, K(i) =k $로 표현하겠습니다.
4.2 Computing alpha and unmixed colors
이제 완충 영역 내의 픽셀 Q의 투명도를 계산하여 보겠습니다. 픽셀 Q는 그 색상이 분포 X에서 Y로 서서히 변해가는 형태로 생각할 수 있습니다. 먼저 함수 $ f(t) $를 정의하도록 합니다.
$$f(t) = p_t(c), 0 \leq t \leq 1$$
여기서 c는 컬러 값입니다. 이 함수는 t 값에 따라 $ f(0) $은 X에 완전히 속해 있는 색상을, $ f(1) $은 Y에 완전히 속해 있는 색상을 가리킵니다. 따라서 이러한 경우, 색상은 다음과 같이 표현됩니다.
$$p_c(c) = \sum_{i=0}^n \alpha_i G_i(c; \mathbf{u}_{J(i)}, \sigma_{\mathbf{u}_{J(i)}}^2)$$
$$p_c(c) = \sum_{i=0}^n \alpha_i G_i(c; \mathbf{v}_{K(i)}, \sigma_{\mathbf{u}_{J(i)}}^2)$$
여기서 $ \alpha $는 Gaussian 분포의 가중치로 앞에서 계산했던 $ x_{J(i)}, y_{K(i)} $ 를 토대로 1로 정규화하여 계산된 값입니다.
우리가 필요한 부분은 t가 0이나 1이 아닐 경우로 이와 같은 경우엔 아래와 같이 X와 Y를 섞어 평균과 분산 값을 만든 Gaussian 분포를 사용합니다.
$$p_t(c) = \sum_{i=0}^n \alpha_i G_i(c; \mu_i(t), \sigma_i^2(t))$$
$$\mu_i(t) = (1-t) \mathbf{u}_{J(i)} + t \mathbf{v}_{K(i)}$$
$$\sigma_i(t) = (1-t) \sigma_{J(i)}^2 + t \sigma_{K(i)}^2$$
이렇게 여러 Gaussian이 혼합된 함수 f로부터 색상 c는 다음과 같이 결정됩니다.
$$\alpha_Q = \arg \max_t f(t)|_Q$$
즉 색상 c가 주어졌을 때 가장 함수 f의 값이 높은 부분의 t 값을 투명도로 사용한다는 것입니다. 실제로 구현에서는 t를 0.01 단위로 계산하여 t를 구하도록 하였습니다.
한가지 더 필요한 것이 있습니다. 바로 투명도를 적용하기 이전의 각 background, foreground 부분의 색상입니다. 이것 또한 양 분포 X, Y를 이용하여 계산합니다. 먼저 양 영역의 가중치 평균을 계산합니다.
$$\hat{\mathbf{u}}_Q = \frac{\sum_{i=1}^n = w_i \mathbf{u}_i } {\sum_{i=1}^n w_i}, \hat{\mathbf{v}}_Q = \frac{\sum_{i=1}^n = w_i \mathbf{v}_i } {\sum_{i=1}^n w_i}$$
이 두 색상을 연결하는 선을 생각하였을 때, 이 선을 투명도 $ \alpha : 1 - \alpha $으로 나누는 지점의 색을 $ Q' $로 생각할 수 있습니다. 이제 이 지점과 원래 색 사이의 색상 차이, 즉 $ \vec{Q' Q} $는 위에서 구한 영역의 평균 색상과의 실제 픽셀 간의 차이, residue라는 개념을 생각할 수 있습니다. 이제 이 residue를 $ \hat{\mathbf{u}}, \hat{\mathbf{v}} $에 더하여 background, foreground에서의 색상으로 사용합니다.