안녕하세요. 지난 포스팅의 디지털 영상 처리 - 주파수 공간 필터링 기초 2에서는 푸리에 변환과 컨볼루션 정리에 대해서 알아보았습니다. 기초 파트에서 유심히 보셔야 할 키워드는 3가지로 임펄스 열(impulse sequence), 푸리에 변환(Fourier Transform), 그리고 컨볼루션 정리(Convolution Theorem)만 이해하고 있으시면 주파수 공간 필터링을 이해할 수 있습니다. 오늘은 디지털 신호(digital signal) 샘플링과 샘플링된 신호에 푸리에 변환을 시키면 어떤 결과를 얻는지 분석하고 이해하는 시간을 갖도록 하겠습니다.
1. 샘플링(Sampling)
아주 옛날에 제가 정리했던 디지털 영상 처리 기초 파트에서 자연 상태인 continuous 함수를 컴퓨터에서 다루기 위해서는 반드시 이산화(digitalization)이 필요하다고 하였습니다. 이산화는 2개의 단계로 구성되며 각각 샘플링(sampling)과 양자화(quantization)입니다. 이전에 쉽게 이해하기 위해서 샘플링은 시간축을 기준으로 이산 값을 선택하고 양자화는 $y$ 축을 기준으로 이산 값을 선택한다고 하였습니다. 저희는 이 두 가지 단계 중 샘플링을 좀 더 자세하게 파보도록 하겠습니다.
어떤 임의의 함수 $f$가 있다고 가정하겠습니다. 해당 함수를 샘플링하려면 어떻게 하는 게 좋을까요? 수학적 모델링이 가능할까요? 그러기 위해서는 먼저 샘플링의 가장 중요한 특성인 "등간격"으로 값을 선택한다는 것을 알아야합니다. 이를 수학적으로 쓰는 방법이 바로 임펄스 열입니다.
위의 그림에서 저희는 연속 임펄수 함수를 입력된 함수에 곱하면 특정 위치에 대한 값을 샘플링할 수 있습니다. 따라서 이를 길게 나열한 임펄스 열을 이용하면 $\Delta X$만큼의 등간격을 가지도록 샘플링을 할 수 있습니다. 그리고 임펄스 열은 $s_{\Delta X}(t) = \sum_{n = -\infty}^{\infty} \delta(t - n\Delta X)$로 정의됩니다. 이때, 시간에 대한 특성을 강조하기 위해서 $\Delta X$가 아닌 $\Delta T$만큼 함수 $f(t)$를 샘플링한다고 하면 저희는 아래와 같은 수식을 얻을 수 있습니다.
$$\tilde{f}(t) = f(t)s_{\Delta T}(t) = \sum_{n = -\infty}^{\infty} f(t)\delta(t - n\Delta T)$$
위의 수식은 단순하게 입력 함수에 $\Delta T$ 간격을 가지는 임펄스 열을 곱한 것 밖에 없습니다. 그러면 저희가 원하는 샘플링된 함수 $\tilde{f}(t)$를 얻을 수 있습니다. 이를 그림으로 나타내면 아래와 같습니다.
여기서 저희는 임펄스 함수의 중요한 특성인 선별 특성(Sifting property)를 이용해서 재미있는 계산을 해볼 수 있습니다. 어떤 임의의 함수가 있을 때 $k$번째로 샘플링된 함수의 값만 얻고 싶다고 가정하면 어떻게 구할 수 있을까요? 이때 아래와 같이 선별 특성을 활용할 수 있습니다.
$$f_{k} = \int_{-\infty}^{\infty} f(t)\delta(t - k\Delta T) = f(k\Delta T)$$
2. 샘플링된 함수의 푸리에 변환
지금까지는 단순히 함수에 샘플링만 해보았습니다. 이번에는 샘플링된 함수에 푸리에 변환을 적용해보도록 하겠습니다. 이를 통해서 저희는 샘플링 정리(Sampling Theory)를 유도할 수 있습니다.
$F(\mu)$를 $f(t)$의 푸리에 변환 함수, $\tilde{f}(t)$를 등간격 $\Delta T$만큼 샘플링된 함수라고 가정하겠습니다. 첫 번째 궁금증은 샘플링된 함수에 푸리에 변환을 적용하면 어떻게 될까?입니다. 이를 위해서는 먼저 임펄스 열의 푸리에 변환을 알아야 합니다. 간단하게 먼저 유도해보도록 하죠.
문제를 간단하게 하기 위해서 단위 임펄스 함수의 중심이 원점에 위치하였다고 가정하겠습니다. 그러면 단위 임펄스 함수의 푸리에 변환은 선별 특성을 활용하여 아래와 같이 쓸 수 있습니다.
$$F(\mu) = \int_{-\infty}^{\infty} \delta(t)e^{-j2\pi\mu t} \; dt $$
$$= \int_{-\infty}^{\infty} e^{-j2\pi\mu t} \delta(t) \; dt$$
$$= e^{-j2\pi\mu 0} = e^{0} = 1$$
원점을 중심으로 한 단위 임펄스 함수의 푸리에 변환은 항상 상수 1이 나오게 되는군요. 이를 약간 확장시켜서 임의의 중심 $t = t_{0}$을 가지는 단위 임펄스 함수의 푸리에 변환을 계산해보도록 하겠습니다. 이번에는 선별 특성을 활용하면 쉽게 유도할 수 있습니다.
$$F(\mu) = \int_{-\infty}^{\infty} \delta(t - t_{0})e^{-j2\pi\mu t} \; dt$$
$$ = \int_{-\infty}^{\infty} e^{-j2\pi\mu t} \delta(t - t_{0}) \; dt$$
$$ = e^{-j2\pi\mu t_{0}} = \cos{\left(2\pi\mu t_{0}\right) - j\sin{\left(2\pi\mu t_{0}\right)}}$$
단순히 중심을 바꾸었을 뿐인데 이번에는 오일러 공식을 이용하여 코사인,사인의 조합이 나타나는 것을 볼 수 있습니다. 이제 저희가 그토록 계산하고 싶었던 임펄스 열의 푸리에 변환을 계산해보도록 하겠습니다. 일단 임펄스 열 함수가 등간격 $\Delta T$를 가지는 "주기 함수"라는 점에 주목해야 합니다. 이는 저희가 임펄스 열을 푸리에 급수로 표현할 수 있다는 것으로 이해할 수 있기 때문에 아래와 같이 쓸 수 있습니다.
$$s_{\Delta T}(t) = \sum_{n = -\infty}^{\infty} c_{n}e^{j\frac{2\pi n}{\Delta T}t}$$
이때, $c_{n} = \frac{1}{\Delta T}\int_{-\frac{\Delta T}{2}}^{\frac{\Delta T}{2}} s_{\Delta T}(t)e^{-j\frac{2\pi n}{\Delta T}t} \; dt$입니다. 여기서 중요한 것은 적분 구간입니다. 현재 $\left[-\frac{\Delta T}{2}, \frac{\Delta T}{2}\right]$사이를 적분하고 있습니다.
위의 그림을 보시면 아시겠지만, 해당 구간을 적분하면 남는 것은 오직 원점을 중심으로 한 단위 임펄스 함수입니다. 따라서 저희는 $c_{n}$을 더 간단하게 만들 수 있습니다.
$$c_{n} = \frac{1}{\Delta T}\int_{-\frac{\Delta T}{2}}^{\frac{\Delta T}{2}} \delta(t)e^{-j\frac{2\pi n}{\Delta T}t} \; dt$$
$$ = \frac{1}{\Delta T}e^{0}$$
$$ = \frac{1}{\Delta T}$$
따라서 임펄스 열의 푸리에 급수 역시 더욱 간단해집니다.
$$s_{\Delta T}(t) = \frac{1}{\Delta T}\sum_{n = -\infty}^{\infty} e^{j\frac{2\pi n}{\Delta T}t}$$
하지만 저희의 최종 목적은 임펄스 열의 푸리에 변환을 구하는 것이기 때문에 아직 갈길이 남았습니다. 여기서 사용할 특성은 푸리에 변환의 선형성(linearity)입니다. 그리고 임펄스 열의 푸리에 급수 표현을 사용한다면 각 요소의 푸리에 급수를 푸리에 변환을 한 결과의 합으로 표현할 수 있다는 것을 의미합니다. 즉, 저희는 $\mathcal{F}\{e^{j\frac{2\pi n}{\Delta T}t}\}$만 구하면 사실 상 끝나게 되는 것이죠. 이는 임의의 중심을 가지는 단위 임펄스 함수에서 역 푸리에 변환을 하게 쉽게 유도할 수 있으니 자세한 설명은 생략하도록 하겠습니다.
$$\mathcal{F}\{e^{j\frac{2\pi n}{\Delta T}t}\} = \int_{-\infty}^{\infty} e^{j\frac{2\pi n}{\Delta T}t} e^{-j2\pi\mu t} \; dt$$
$$ = \delta\left(\mu - \frac{n}{\Delta T}\right)$$
따라서 등간격 $\Delta T$를 가지는 임펄스 열 $s_{\Delta T}(t)$의 푸리에 변환 $S(\mu)$는 아래와 같습니다.
$$S(\mu) = \mathcal{F}\{s_{\Delta T}(t)\} = \mathcal{F}\{\frac{1}{\Delta T} \sum_{n=-\infty}^{\infty} e^{j\frac{2\pi n}{\Delta T}t}\}$$
$$ = \frac{1}{\Delta T}\mathcal{\sum_{n=-\infty}^{\infty} e^{j\frac{2\pi n}{\Delta T}t}}= \frac{1}{\Delta T} \sum_{n=-\infty}^{\infty} \mathcal{F}\{e^{j\frac{2\pi n}{\Delta T}t}\}$$
$$ = \frac{1}{\Delta T} \sum_{n=-\infty}^{\infty} \delta\left(\mu - \frac{n}{\Delta T}\right)$$
정말 먼 길을 돌아서 얻은 결과입니다! 해당 식을 분석해보면 영상 도메인에서 $\Delta T$의 주기를 가지는 임펄스 열은 주파수 공간에서 보았을 때는 $\frac{1}{\Delta T}$를 주기로 하는 임펄스 열임을 알 수 있습니다.
이제 다시 샘플링된 함수의 푸리에 변환을 구해보도록 하겠습니다. 이를 위해 방금 구한 임펄스 열의 푸리에 변환과 컨볼루션 정리를 이용하면 됩니다. 컨볼루션 정리란 영상 공간에서의 단순 곱은 주파수 공간에서 컨볼루션 연산, 그리고 영상 공간에서의 컨볼루션은 주파수 공간에서 단순 곱과 같다는 정리입니다.
$$\tilde{F}(\mu) = \mathcal{F}\{\tilde{f}(t)\} = \mathcal{F}\{f(t)s_{\Delta T}(t)\} = F(\mu) * S(\mu)$$
즉, 샘플링된 함수의 푸리에 변환은 기존의 함수의 푸리에 변환과 주기 $\Delta T$를 가지는 임펄스 열의 컨볼루션 연산을 취한 것과 같습니다. 이제 컨볼루션 연산의 정의, 임펄스 열의 푸리에 변환, 임펄스 함수의 선별 특성을 이용해서 전개해보도록 하겠습니다. 두 함수 $f(t), h(t)$의 컨볼루션 연산은 $f(t) * h(t) = \int_{-\infty}^{\infty} f(\tau)h(t - \tau) \; d\tau$로 정의됩니다.
$$\tilde{F}(\mu) = F(\mu) * S(\mu) = \int_{-\infty}^{\infty} F(\tau)S(\mu -\tau) \; d\tau$$
$$ = \frac{1}{\Delta T} \int_{-\infty}^{\infty} F(\tau) \sum_{n = -\infty}^{\infty} \delta(\mu - \tau - \frac{n}{\Delta t}) \; d\tau$$
$$ = \frac{1}{\Delta T}\sum_{n=-\infty}^{\infty} \int_{-\infty}^{\infty} F(\tau)\delta(\mu - \tau - \frac{n}{\Delta T}) \; d\tau$$
$$ = \frac{1}{\Delta T}\sum_{n = -\infty}^{\infty} F(\mu - \frac{n}{\Delta T})$$
물론 수학을 엄밀하게 배우신 분들이 시라면(특히 해석학) 무한 구간의 적분과 합의 위치를 바꾸신 게 맘에 안 드실 수 있습니다. 이 부분은 $F(\mu)$가 일단은 적분과 합을 바꿀 수 있는 정말 좋은 성질을 가진다고 가정하도록 하겠습니다. 결론적으로 샘플링된 함수 $\tilde{f}(t)$의 푸리에 변환은 $\tilde{F}(\mu)$ 사이의 관계는 아래와 같습니다.
$$\mathcal{F}\{\tilde{f}(t)\} = \tilde{F}(t) = \frac{1}{\Delta T}\sum_{n = -\infty}^{\infty} F(\mu - \frac{n}{\Delta T})$$
일단 무슨 의미가 있는지 알아보겠습니다. 제가 생각했을 때는 3가지로 나눌 수 있습니다.
- 기존 함수 $f(t)$의 푸리에 변환인 $F(\mu)$라는 함수가 주기 $\frac{1}{\Delta T}$에 의존하여 무한 번 반복된다.
- $\tilde{F}(\mu)$의 반복 주기는 임펄스 열의 주기 $\Delta T$에 반비례한다.
- $\tilde{f}(t)$는 샘플링된 이산 함수이지만 $\tilde{F}(\mu)$는 연속 함수이다.
이를 통해서 매우 중요한 직관을 한 가지 가져야 합니다. 바로 샘플링을 어떻게 하느냐에 따라서 $\tilde{F}(\mu)$의 모양이 달라진다는 것입니다. 바로 간단한 그림을 보시죠.
가장 위의 그림이 기존 함수 $f(t)$의 푸리에 변환 $F(\mu)$ 결과라고 가정하겠습니다. 이때, $\Delta T$에 따라서 크게 3가지의 주기 함수를 얻을 수 있습니다. $\Delta T$가 작으면 $\frac{1}{\Delta T}$는 커지겠죠. 그러면 주파수 공간에서는 샘플링 속도가 굉장히 널널해질 겁니다. 따라서 (b) 그림을 얻을 수 있고 이는 오버샘플링(over-sampling)이라고 합니다. 그리고 $\Delta T$가 크면 $\frac{1}{\Delta T}$가 작아집니다. 이 경우에는 굉장히 촘촘하게 샘플링하기 때문에 반복되는 $F(\mu)$끼리 영향을 주게 됩니다. 따라서 (d) 그림을 얻게 되며 이는 언더 샘플링(under-sampling)이라고 합니다. 만약 딱 샘플링 속도를 딱 맞게 하면 (c) 그림을 얻게 되면 이는 임계 샘플링(critical- sampling)이라고 합니다.
'image processing' 카테고리의 다른 글
디지털 영상 처리 - 단일 변수 함수의 이산 푸리에 변환(Discrete Fourier Transform) (0) | 2021.04.05 |
---|---|
디지털 영상 처리 - 샘플링 정리와 샘플링된 함수 복원 (0) | 2021.04.04 |
디지털 영상 처리 - 주파수 공간 필터링 기초 2 (3) | 2021.03.29 |
디지털 영상 처리 - 주파수 공간 필터링 기초 1 (3) | 2021.03.27 |
디지털 영상 처리 - 공간 개선 방법 결합 (0) | 2021.03.24 |