논문

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

Blur detection for digital images using wavelet transform

[cite]10.1109/ICME.2004.1394114[/cite]

1. Introduction

디지털 카메라가 대중화됨에 따라 많은 사람들이 그들의 사진을 모으고 있습니다. 하지만 그중 많은 사진들은 그 질이 떨어집니다. 사진의 질을 평가하는 방법은 블러에 의한 질 저하가 있는지 살펴보는 것입니다. 만약 그러한 사진들을 자동으로 골라 복원해주거나 단순히 버릴 수만 있게 하여도 사용자들을 돕는 일이며 그것을 위해 사진의 블러를 자동으로 검출하는 알고리즘이 필요합니다.

Linear blur의 모델은 다음과 같습니다.

$$G = H * F + N$$

G는 노이즈가 포함된 블러된 이미지, F는 원래 이미지, N은 노이즈입니다. 행렬 H는 블러 함수를 나타냅니다. Indirect 방법은 블러 함수 H의 복원에 관심을 두고 있어 블러 identification과 블러 estimation을 수반합니다. 이에 반면, direct 방법의 경우, 좀 더 discriminative하여 블러의 유무만을 검사합니다. 이러한 방법들은 보통 에지 같은 피쳐들을 사용합니다.

이 논문에서는 Harr wavelet transform을 이용한 새로운 블러 검출 알고리즘을 소개합니다. 이 방법은 블러가 있는지 아닌지를 평가할 뿐만 아니라 어느정도로 블러된지를 평가하여 줍니다. Harr wavelet transform릉 이용하여 다양한 타입의 에지들을 검출하고 복원하는 것이 가능합니다. 이것은 Out-of-focus 블러와 Linear-motion 블러에 특히 효과적입니다. 제안하는 방법은 사진을 복원하거나 블러 함수 H에는 관심이 없기 때문에 처리 속도 또한 빠릅니다.

2. Blur detection scheme

여러 에지들은 보통 3개의 타입으로 나눌 수 있습니다. Dirac-Structure, Step-Structure, Roof-Structure입니다. 여기서는 여기에서 더 나아가 Step-Structure를 Astep-structure와 Gstep-Structure로 분류하고자 합니다. 그것은 그래디언트에 서서히 변하는 픽셀값 변화가 잇는지 없는지에 따라 나눈 것입니다. 또한 Gstep-Structure와 Roof-Structure 에지에는 그 샤프니스에 대한 파라미터 $ \alpha, 0 \lt \alpha \lt \pi /2 $가 있습니다. 큰 값일 수록 에지는 샤프하게 됩니다.

블러를 검출하기 위한 기본적인 방법은 다음과 같습니다. 대다수의 자연적인 이미지는 모든 타입의 에지를 포함하고 있습니다. 그리고 Gstep-Structure와 Roof-Structure는 샤프한 것들입니다. 블러가 발생하게 되면 Dira-Structure와 Astep-Structure가 사라지게 됩니다. 그리고 Gstep-Structure와 Roof-Structure는 그 샤프함이 줄어들게 됩니다. 이것에 착안하여 블러된 이미지인지, 얼마나 되었는지를 판단하는 조건을 만들었습니다.

2.1. Blur effect on different edges

디지털 카메라로 얻은 이미지는 큰 노이즈가 없기 때문에 노이즈 항 N은 무시할 수 있을 것입니다. Out-of-focus, 혹은 Linear-motion 블러가 발생하게 되면 각 에지들은 그 특성이 변화하여 모양이 변하게 됩니다. 즉, Dirac이 블러 후에는 Roof로, Astep은 Gstep으로 변합니다. 또한 Gstep과 Roof는 그 샤프니스가 떨어지게 됩니다.

2.2. Edge type and sharpness detection

Wavelet transform은 multi-resolution analysis를 할 수 있는 것으로 잘 알려져 있습니다. Wavelet transform의 local maxima를 이용하면 특이한 구조를 잡아낼 수 있다고 알려져 있으며 특히 modulus-angle-separated wavelet (MSQ)를 사용하면 Dirac-Structure와 Step-Structure 에지를 찾을 수 있다고 합니다. 하지만 MASW는 처리 시간이 많이 걸리므로 여기서는 간단하게 Harr wavelet transform (HWT)를 사용하고자 합니다.

  1. Harr wavelet transform을 이미지에 적용합니다. 그 단계는 3까지만 수행합니다.
  2. 각 스케일에 대하여 에지 맵을 계산합니다.
    $Emap_i(k, l) = \sqrt{LH^2_i + HL_i^2 + HH_i^2 } \ (i=1,2,3) $
  3. 에지 맵을 잘게 쪼갠 뒤 local maxima를 찾습니다. 조각의 크기는 가장 큰 스케일에서 2 * 2, 4 * 4, 8 * 8 순으로 사용합니다.

에지 맵에서의 큰 값은 더 큰 에지가 있다는 뜻입니다. 에지 맵에서 문턱치를 넘는 값만을 남기고 나머지는 에지가 아닌 픽셀로 표시하도록 합니다.

위의 알고리즘을 적용한 후 분석하여 보니, 다음과 같은 특성을 찾을 수 있었습니다.

Emax1 Emax2 Emax3
Dirac-Structure Highest Middle Lowest
Astep-Structure Highest Middle Lowest
Gstep-Structure Lowest Middle Highest
Roof-Structure Lowest Middle Highest
Lowest Highest Middle

다른 중요한 성질은 블러된 에지의 샤프함을 복원할 수 잇다는 것입니다. Roof-Structure와 Gstep-Structure는 더 얇아집니다.

두가지의 성질을 모아서 다음과 같은 규칙을 만들 수 있었습니다.

  • 규칙 1 : $Emax_1(k, l) \gt threshold$, $Emax_2(k, l) \gt threshold$, $Emax_3(k, l) \gt threshold$ 이라면 (k, l)은 에지입니다.

  • 규칙 2 : 에지 점에 대하여 $Emax_1(k, l) \gt Emax_2(k, l) \gt Emax_3(k, l)$이라면 (k, l)는 Dirac-Structure이거나 Astep-Structure입니다.

  • 규칙 3 : 에지 점에 대하여 $Emax_1(k, l) \lt Emax_2(k, l) \lt Emax_3(k, l)$이라면 (k, l)은 Roof-Structure 이거나 Gstep-Structure입니다.
  • 규칙 4 : 에지 점에 대하여 $Emax_2(k, l) \gt Emax_1(k, l)$이거나 $ Emax_2(k, l) \gt Emax_3(k, l)$이라면 (k, l)은 Roof-Structure
  • 규칙 5 : Gstep-Structure나 Roof-Structure의 경우, $ Emax_1(k, l) \lt threshold $이라면 (k, l)은 블러된 이미지입니다.

2.3. Proposed blur detection scheme

  1. 처음 언급한 알고리즘을 수행합니다.
  2. 규칙1을 이용하여 에지를 찾습니다. $N_{edge}$는 그 수입니다.
  3. 규칙2을 이용하여 Dirac-Structure와 Astep-Structure를 찹습니다. $N_{da}$는 그 수입니다.
  4. 규칙3과 규칙 4를 이용하여 Roof-Structure와 Gstep-Structure를 찾습니다. $N_{rg}$가 그 수입니다.
  5. 규칙 5를 이용하여 샤프니스를 잃은 모든 Roof-Structure와 Gstep-Structure를 찾습니다. $N_{brg}$가 그 수입니다.
  6. Dirac-Structure와 Astep-Structure의 비를 계산힙니다. $ Per = \frac{N_{da}}{N_{edge}}$. 만일 그 비가 MinZero보다 크다면 이미지는 블러하지 않습니다. MinZero는 0에 매우 가까운 양수입니다.
  7. Roof-Structure와 Gstep-Structure가 얼마나 블러되었는지 계산 $\frac{N_{brg}}{N_{rg}}$한 뒤, 그 값을 이미지의 블러 신뢰도로 사용합니다.

3. Experimental results

사람은 30 이하의 픽셀 값 차이를 구분하기 힘들기 때문에 threahod는 35로 하였습니다. 이상적으로는 MinZero는 0으로 사용하는게 맞지만 여기서는 0.05를 사용하였습니다.


Add a Comment Trackback