논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Edge-based Blur Kernel Estimation Using Patch Priors

[cite]10.1109/ICCPhot.2013.6528301[/cite]

1. Introduction

카메라 흔들림에 의한 이미지 블러는 사진가 입장에서 일반적인 문제입니다. 모션 블러된 이미지 y는 보통 다음과 같이 모델링됩니다.

$$ y = k * x + n $$

k는 블러 커널, x는 적용 전의 이미지, n은 노이즈입니다. 또한 *은 컨볼루션 연산입니다. 아무런 정보 없이 이미지 한장만으로 디컨볼루션하는 blind deconvolution을 수행하려면 y로부터 x와 k를 동시에 추정해야 하며, 실은 불가능한 일입니다.

이러한 점을 극복하기 위하여 k와 x에 대하여 사전 정보를 이용하거나 강한 가정을 도입하는 방법들이 제안되었습니다. k가 sparse하거나 연속이어야 한다는 점, x가 heavy tailed한 그래디언트를 가져야 한다거나 하는 가정들이 그런 것입니다. 하지만 sparse한 사전 정보는 커널을 추정하기에는 부적당합니다.

다른 방법으로는 Joshi와 Cho의 연구와 같이 블러된 에지로부터 샤프한 에지를 복원하는 방법이 있습니다. 이들은 작은 스케일의 블러에서는 잘 작동하나 큰 블러 커널에는 잘 작동하지 않는다는 단점이 있습니다. 큰 블러 커널을 다루기 위해서 Cho와 Lee는 에지 기반의 방법을 소개하였습니다. 이는 coarse-to-fine 방법을 통하여 샤프한 에지를 복원하였습니다. 하지만 이 방법은 여전히 휴리스틱 이미지 필터에 의존하고 있어 안정적이지 않은 성능을 보여줍니다.

이 논문에서는 새로운 에지 기반의 방법을 제안합니다. 그 방법은 본래 이미지의 에지에서 추출된 이미지 패치를 사전 지식으로 사용합니다. 패치 모델은 필터 반응을 보는 것보다 더 나은 모델을 구성할 수 있습니다. 특히 x의 “믿을 만한” 부분 집합을 추정해내어 사용합니다.

이 논문의 주된 물음은 어떤 것이 이미지 x의 blind deconvolution을 위한 옳은 사전 지식인지를 결정하는 것입니다. 이미지 사전 지식은 너무 좋은 표현을 가지면 안됩니다. 사전 지식이 과도하게 좋은 표현력을 가지면 블러링 자체를 수용하게 되어버리기 때문입니다. 따라서 이 방법은 에지, 코너, T자형 등의 구조를 가지는 기초적인 패치만을 사전 시직으로 사용하고자 합니다. 올바른 패치를 선택하기 위하여 일반 이미지 데이터셋으로부터 학습된 통계적 프라이어와 합성된 단순 패치를 모두 테스트하였습니다.

2. Algorithm Overview

우선 이 알고리즘은 coarse-to-fine 방식과, 반복적인 최적화 프레임워크에서 돌아갑니다. 각 레벨 s에서 이전 단계의 $k_{s-1}$를 업샘플링하여 $k_s$를 생성하고, 기존 이미지 $x_s$의 복구 단계(x-step)를 밟습니다. 하지만 여기서는 단순히 $x_s$의 복구만을 신경씁니다. 새로운 $x_s$가 업데이트되고 나면 복구된 그래디언트와 블러된 이미지를 비교하여 $k_s$를 업데이트하는 단계(k-step)를 수행합니다. 이러한 과정을 $k_s$가 수렴할 때까지 반복하고, 그 결과 $k_s$는 다음 레벨인 $k_{s+1}$로 전파됩니다.

기존의 연구와는 달리 그래디언트를 추정하기 위한 휴리스틱한 이미지 필터링 과정은 존재하지 않고, 그 대신 샤프하고 노이즈가 없는 x가 되도록 유도하는 non-parametric 패치를 사용할 것입니다.

3. Nonparametric Patch Priors

대부분의 디블러링 방법들은 최적화 과정에서 샤프한 정답으로 기존 이미지를 몰고가는 경향이 있습니다. 그리고 $ \delta $ PSF와 블러된 x의 degenrate 케이스를 무시하곤 합니다. 이를 정리하기 위하여 두개의 독립된 가상의 변수 $\{ Z^i \}, \{ \sigma^i \} $ 를 소개합니다. 이들은 에지로 여겨지는 각 픽셀 위치 i마다 정의됩니다. $Z^i$는 i에 할당된 특정한 샘플 패치이며, $ \sigma^i$는 본래 이미지 패치가 가졌으면 하는 지역 컨트래스트 값입니다. 여기서 모든 패치들은 정규화된 공간에서 이루어집니다. 즉 평균을 뺀 뒤에 표준 편차로 나눠주었습니다.

이렇게 만든 패치는 충분히 좋은 표현력을 가진다고 생각합니다. 즉 어떠한 일반 이미지에서의 에지 패치 P라도 $P = \sigma Z + \mu + \epsilon $ 으로 근사화할 수 있다고 생각합니다. $\sigma$는 패치 컨트래스, $\mu$는 패치의 픽셀 값, $\epsilon$은 노이즈입니다. 하지만 과하지는 않은 표현력입니다. 즉 높은 주파수의 텍스쳐나 부드럽게 변하는 그래디언트는 표현하지 못합니다. 대신 블러나 노이즈를 수용하기 시작하게 되어 샤프니스를 복구하는 힘을 잃어버립니다.

또한 이 방법은 이미지의 일부분에만 적용되기 때문에 이미지 전체에 대해 적용되는 sparsity prior를 이용한 방법이나 GMM기반의 패치 prior를 이용한 방법과는 구별됩니다.

3.1. Learning a Natural Edge Patch Prior

이미지 요소들을 모델링하기 위하여 이미지 컨투어 위치에서 추출된 패치들을 이용하여 학습시키는 방법을 생각할 수 있습니다. 먼저 BSDS500 데이터셋의 500개의 흑백 이미지를 노이즈를 줄이기 위해서 반씩 다운샘플링하였습니다. 다음 그래디언트 세기에 기반하여 마스크를 만들었습니다. 마스크를 만드는 방법은 후에 설명하도록 하겠습니다. 이 마스크는 사람이 지정한 ground truth 컨투어에 AND 연산을 하여 최종 마스크를 생성하도록 합니다. 여기서는 5 * 5 크기의 모든 패치들을 추출하였으며 그 결과 500개의 이미지로부터 220k개의 패치를 생성하였습니다. 이들은 모두 정규화하여 DC 성분을 제거하고 표준 편차로 나눈 뒤에, k-means 알고리즘을 통하여 중점들을 계산하고 그것들로 대표 패치 $ \{ Z_{\text{nat}} \} $를 정의합니다.

또한 지역 컨트래스트 분포를 또한 패치로부터 학습시킵니다.

이렇게 학습된 패치들은 다음과 같은 특징을 갖게 됩니다.

  1. 패치가 가지는 복잡도는 k-means에서의 클러스터 크기에 따라 달라집니다. 예를들어 가로 세로의 단순 에지 모양은 큰 클러스터에서, 그리고 그러한 클러스터들에서 나온 샘플들은 적은 모양 차이를 가집니다. 하지만 복잡한 모양이나 노이즈는 상대적으로 작은 클러스터에서 나오고, 그들끼리는 꽤 큰 차이를 갖습니다.
  2. 의외로 이미지 요소들의 복잡도는 적습니다. k = 2560가 되었을 때에 이미 꽤 중복이 존재했었습니다. 더욱이 꽤 많은 클러스터가 방향과 위치만 다른 단순 스텝 에지였습니다.

3.2. A Synthetic Edge Patch Prior

보통 이미지에서 학습된 패치들은 상대적으로 단순하지만 정렬 문제가 있는채로 평균을 내는 등의 원인으로 여전히 블러나 노이즈를 포함하고 있습니다. 따라서 합성된 패치를 디자인해보았습니다. 이것은 좀더 표현적이고 단순하며 샤프합니다.

합성 패치 $ \{ Z_{\text{synth}} \} $를 생성하기 위하여 4개의 씨앗 패치를 사용하였습니다. 씨앗 패치랑 1스텝 에지와 코너, 두께가 다른 2개의 바(bar)로 구성됩니다. 여기에 2가지 종류의 변환을 적용하였습니다. 3도씩 0 ~ 360 까지의 회전과 각 방향으로 ±1, 2 의 이동입니다. 합성된 패치들은 이들 변환의 모든 조합을 통해 생성합니다. 모든 패치는 역시 정규화되었습니다.

실험에서는 합성된 패치는 일반 이미지에서 생성한 패치에 거의 비슷하게 작동하였습니다.

3.3 Behavior Comparison

Cho와 Lee는 prediction 단계에서 bilateral 필터링을 통하여 노이즈와 shock를 줄이고 에지를 샤프하게 만들었습니다. 하지만 필터링은 때론 실패하는데 특히 노이즈가 에지를 따라 있거나 복잡한 이미지 구조가 존재할 경우에 잘 작동하지 않습니다. 따라서 노이즈에 강인하고 샤프한 에지를 생성하는 더 좋은 방법으로 교체하고자 합니다.

교체한 방법과 Cho와 Lee의 방법을 비교해보면, 이 논문의 방법이 더 높은 퀄러티의 x를 추정해내는 것을 볼 수 있습니다.

4. Kernel Estimation using Patch Priors

Cho와 Lee의 디블러링 프레임워크와 마찬가지로 여기서도 커널 추정은 coarse-t-fine 방법론에서 x, k-step을 반복적으로 수행하여 이루어집니다. 이제 어떻게 하는지 자세히 살펴보겠습니다. 가장 coarsest 레벨에서 $k$는 3 * 3 가우시안으로 초기화하였습니다.

4.1. x-step

현재의 블러 커널 k가 주어졌을 때 x-step의 목표는 원래 이미지 x를 생성하는 것입니다. x를 추정하기 위해서는 다음의 네어지 함수를 최소화 하여야 합니다.

$$f_x(x) = \sum_{D_*} w_* || KD_* x - D_* y||^2 + \alpha ||d_hx||^2 + \alpha ||D_v x ||^2 + \frac{\beta}{M} \sum_{i \in M} \rho (P_i x - q^i) + \gamma \sum_{i \in M} (\sigma^i - F^{-1}_{ref}(F_{\sigma, x}(\sigma^i)))$$

K와 y, x는 각각 블러 커널 k, 블러된 이미지 y, 원래 이미지 x의 행렬로 나타낸 꼴입니다. $D_*$는 편미분 연산의 행렬 형태이고, $w_*$는 스칼라 가중치를 나타냅니다. $D_*$를 위해서 0, 1, 2-order 미분을 사용하였습니다. 또한 $w_*$ 값은 [16] 연구에서 차용하였습니다. $D_h, D_v$는 가로, 세로의 1차 미분 연산입니다. $_i$는 이진 행렬 추출 연산으로 원래 이미지 x의 위치 i의 패치를 추출하는 기능을 합니다. 여기서는 패치 크기는 5 * 5를 사용하였습니다. $4q_i$$q_i = \sigma^i Z^i + \mu^i $를 의미하며, $Z^i$는 위치 i에서의 샘플 패치를 나타냅니다. M은 에지 성분으로 분류된 픽셀 값을 가지고 있으며, 이들 부분에만 날카롭게 되도록 알고리즘을 적용할 것입니다. 나머지 위치들에는 이미지 미분에 대한 가우시안을 적용하여 regularized하였습니다. $|M|$는 에지 성분의 숫자이며, $\rho(r) = \log(1+\frac{r^2}{2 \epsilon^2}$는 패널티 함수입니다. 마지막으로 $F_{\sigma, x}$는 이미지 x에서 $\{ \sigma^i \}$의 이상적 분포의 CDF를 나타냅니다. $F_{ref}$는 지역 컨트래스트의 분포를 조사하기 위한 참조 분포를 나타냅니다.

직관적으로 첫번째 항은 데이터 항으로 블러 모델을 적용합니다. 이미지가 부드러움을 regularize하기 위한 weak 가우시안 prior입니다. M에 속하지 않능 영역들은 k-step에서 바로 이 두개 항만 영향을 받게 되어 안정화에 도움을 줍니다. 마지막 두개 항은 우리가 가지고 있는 패치 prior를 적용한 항입니다. 크게 두가지 제한 조건이 있는데, 하나는 x에서 에지 요소 패치는 적어도 어느 한 샘플 패치와 비슷해야 한다, 다음으로 $\sigma$의 분포는 참조 분포와 비슷해야 한다입니다.

위의 식을 한번에 최적화하는 것은 어렵지만 반복적으로 근사화하는 과정을 통하여 계속 갱신하고자 합니다. 첫번째 반복에서는 $M = \emptyset $ 으로 놓은 뒤, 가우시안 prior만을 사용하여 x를 초기화합니다. 그런 다음 다음의 과정을 수렴할 때 까지 적용합니다.

  1. M의 갱신 : 먼저 8방향으로 길죽한 가우시안의 미분으로 만들어진 필터들의 반응성을 각각 계산하고 그중 가장 큰 반응을 보이는 상위 2%의 픽셀들을 유지한뒤 그것들의 마스크를 얻습니다. 다음 이들 마스크에 모폴로지 연산 thin을 적용한 뒤 작은 조각들은 제거해버립니다. 이 작업은 우리가 에지 패치를 적용할 올바른 위치를 고르는 것입니다.
  2. $\sigma^i$의 갱신 : $M, Z^i, x$를 고정시키고 iterative reweighted least squares (IRLS)를 이용하여 식을 $\sigma$에 대해 최적화합니다. 자세한 풀이는 논문을 참조하면 됩니다.
  3. $Z^i$의 갱신 : 다른 변수들을 고정하고 각 위치 i의 이미지 $\frac{P_i x - \mu^i}{\sigma^i}$ 대하여 가장 비슷한 패치 $Z^i$를 찾습니다.
  4. $x$의 갱신 : 다른 변수들을 고정하고 deconvolution 수식에 의하여 x를 찾습니다. 자세한 수식은 논문을 참고합니다.

4.2. k-step

여기서는 x를 고정하고 k에 대해서만 최적화를 수행합니다. 최적화는 다음 식에 대하여 이루어집니다.

$$f_k(k) = \sum_{\delta_*} w_* ||k * \delta_* x - \delta_* y ||^2 + \beta ||k||^2$$

$\delta_*$$D_*$와 같은 편미분입니다. 한가지 중요한 점은 M이 아닌 지점에서는 그래디언트 $\delta_* x$를 0으로 두고 계산하여야 합니다. 왜냐하면 커널 추정에는 에지들만이 참여하기 때문입니다.

5. Experimental Results

32개의 테스트 셋에 대해서 알고리즘을 테스트하였습니다. 합성된 블러된 테스트셋은 저자가 준비한 640개의 이미지에서 테스트하였습니다. 마지막으로 카메라가 흔들린 실제 이미지에 대하여 실험하였습니다.

성능의 기준은 parse deconvolution과 Zoran, Weiss의 방법을 기준으로 평가하였으며, 분석은 mean PSNR, mean SSIM, 에러율의 geometric mean으로 평가하였습니다.


Add a Comment Trackback