안녕하세요. 지난 포스팅의 디지털 영상 처리 - 역 필터링에서는 굉장히 단순한 방법으로 영상을 복원하는 방법에 대해서 알아보았습니다. 그리고 역 필터링에서 발생하는 문제인 0으로 나눌 때 특정 주파수 영역만 나누는 cut-off 방법도 배웠습니다. 오늘은 이보다 좀 더 고차원적인 방법으로 영상을 복원하는 방법에 대해서 알아보겠습니다.
1. Wiener 필터링
기본적으로 영상 복원의 목표는 오염되지 않은 영상 $f$와 복원된 영상 $\hat{f}$ 사이의 차이를 최소하는 것으로 생각할 수 있습니다. 이를 수식화하면 아래와 같습니다.
$$e^{2} = \mathbb{E}\{(f - \hat{f})^{2}\}$$
여기서 $\mathbb{E}\{\cdot\}$는 기댓값을 의미합니다. 즉, 위 식은 $(f - \hat{f})^{2}$의 합의 평균을 계산하는 것과 동일합니다. 한편, 위 수식은 1942년에 Weiner에 의해서 아래의 3가지 조건이 만족한다면 닫힌 형태로 도출된다는 것을 증명하였습니다.
- 영상과 노이즈 사이에는 상관성이 존재하지 않는다.
- 영상의 평균이 0이거나 노이즈의 평균이 0이다.
- 추정된 영상의 밝기 값은 열화된 영상의 밝기에 대한 선형 함수이다.
위와 같은 가정이 주어진다고 했을 때, 닫힌 형태의 식은 주파수 공간에서 아래와 같습니다.
$$\hat{F}(\mu, \nu) = \left[\frac{H^{*}(\mu, \nu)S_{f}(\mu, \nu)}{S_{f}(\mu, \nu)\left|H(\mu, \nu)\right|^{2} + S_{\eta}(\mu, \nu)}\right]G(\mu, \nu)$$
$$ = \left[\frac{H^{*}(\mu, \nu)}{\left|H(\mu, \nu)\right|^{2} + \frac{S_{\eta}(\mu, \nu)}{S_{f}(\mu, \nu)}}\right]G(\mu, \nu)$$
$$ = \left[\frac{1}{H(\mu, \nu)} \cdot \frac{\left|H^{2}(\mu, \nu)\right|}{\left|H(\mu, \nu)\right|^{2} + \frac{S_{\eta}(\mu, \nu)}{S_{f}(\mu, \nu)}}\right]$$
여기서 사용한 복소수에서의 성질은 복소수와 그에 대응되는 공액 복소수의 곱은 복소수의 크기의 제곱과 동일하다는 것입니다. 즉, $H(\mu, \nu) \cdot H^{*}(\mu, \nu) = \left|H(\mu, \nu)\right|^{2}$입니다. 일반적으로 위와 같이 정의된 필터를 Wiener 필터, 최소 평균 제곱 오차 필터(Minimum Mean Square Error Filter), 최소 제곱 오차 필터(Least Square Error Filter)라고 합니다. 위 필터를 유도하는 과정은 제가 아직 제대로 이해하지 못했기도 했고 이 범위를 벗어나기 때문에 이후에 추가할 수 있다면 추가하도록 하겠습니다. 여기서 나온 기호들에 대한 정의는 아래와 같습니다.
- $H(\mu, \nu)$ : 열화 함수
- $H^{*}(\mu, \nu)$ : $H(\mu, \nu)$의 복소 공액
- $S_{\eta}(\mu, \nu) = \left|N(\mu, \nu)\right|^{2}$ : 노이즈의 전력 스펙트럼
- $S_{f}(\mu, \nu) = \left|F(\mu, \nu)\right|^{2}$ : 열화되지 않은 영상의 전력 스펙트럼
2. 노이즈 측정
이번에는 영상 내에 노이즈의 양을 측정하는 2가지 방법에 대해서 알아보겠습니다. 가장 유명한 방법은 오염되지 않은 영상 $f$와 추정된 영상 $\hat{f}$ 사이의 MSE(Mean Square Error)입니다. 이때, $f, \hat{f} \in \mathbb{R}^{M \times N}$이라고 가정하도록 하겠습니다. 이를 수식적으로 나타내면 아래와 같습니다.
$$\text{MSE}(f, \hat{f}) = \frac{1}{MN}\sum_{x = 0}^{M - 1} \sum_{y = 0}^{N - 1} \left[f(x, y) - \hat{f}(x, y)\right]^{2}$$
머신러닝이나 딥러닝을 공부해보신 분들이라면 꽤나 익숙하실 겁니다. MSE 뿐만 아니라 SNR(Signal-To-Noise Ratio) 역시 유명한 측정방법입니다.
$$\text{SNR} = \frac{\sum_{\mu = 0}^{M - 1}\sum_{\nu = 0}^{N - 1} \left|F(\mu, \nu)\right|^{2}}{\sum_{\mu = 0}^{M - 1} \sum_{\nu = 0}^{N - 1} \left|N(\mu, \nu)\right|^{2}}$$
그런데 여기에서 복원된 영상을 신호로 보고 복원된 영상과 원래 영상 간의 차이를 노이즈로 간주하면 아래와 같이 바뀌게 됩니다.
$$\text{SNR} = \frac{\sum_{x = 0}^{M - 1}\sum_{y = 0}^{N - 1} \hat{f}(x, y)^{2}}{\sum_{x = 0}^{M - 1} \sum_{y = 0}^{N - 1} \left[f(x, y) - \hat{f}(x, y)\right]^{2}}$$
위 그림은 역필터링, Wiener 필터 사이의 결과를 비교해주고 있습니다. (b)와 (c)를 비교했을 때 확실히 (c)가 좀 더 깔끔한 영상을 얻을 수 있습니다.
'image processing' 카테고리의 다른 글
디지털 영상 처리 - 제한된 최소 제곱 필터링 (0) | 2021.06.23 |
---|---|
디지털 영상 처리 - 최소 평균 오차(Wiener) 필터링 구현하기 (0) | 2021.06.21 |
디지털 영상 처리 - 역 필터링 (0) | 2021.06.03 |
디지털 영상 처리 - 열화 함수 추정 (0) | 2021.06.02 |
디지털 영상 처리 - 선형 및 위치 불변 열화 함수 (0) | 2021.05.30 |