안녕하세요. 지난 포스팅의 디지털 영상 처리 - 2D DFT 특성 2 에서는 대칭성, 푸리에 스펙트럼과 위상각 그리고 2D 컨볼루션 정리에 대해서 알아보았습니다. 사실 지금까지는 뭔가 디지털 영상 처리와 동떨어진 느낌이 있었을 겁니다. "디지털 영상 처리를 배우러 들어왔는 데 무슨 수학 수식만 이리 많지..."라는 생각이 드셨을 텐데. 오늘 포스팅에서는 지금까지 알아보았던 모든 DFT 정의와 성질을 이용해서 실질적인 주파수 공간에서의 필터링 기법을 알아보도록 하겠습니다.
기본적으로 주파수 공간에서의 필터링의 첫번째 단계는 영상에 이산 푸리에 변환 $\mathcal{F}$를 적용하여 영상 공간에서 주파수 공간으로 변환시키는 것을 시작으로 합니다. 다음에는 어떤 변환 함수를 이용해서 내부적으로 필터링을 수행한 뒤 변형된 주파수 공간을 다시 이산 역푸리에 변환 $\mathcal{F}^{-1}$을 적용하여 주파수 공간에서 영상 공간으로 변환시켜주는 것이죠.
일련의 과정을 수학적으로 모델링해보도록 하겠습니다. $F(\mu, \nu)$를 입력 영상 $f(x, y)$의 DFT, $H(\mu, \nu)$를 주파수 공간에서의 필터링 함수, 마지막으로 $g(x, y)$를 필터링된 출력 함수라고 했을 때 저희는 아래와 같이 쓸 수 있습니다.
$$g(x, y) = \mathcal{F}^{-1}\{H(\mu, \nu) F(\mu, \nu)\}$$
일반적으로 $H(\mu, \nu)$는 중심에 대해서 대칭적인 함수를 사용하면 단순해집니다. 이를 위해서 입력 영상에 DFT를 적용한 $F(\mu, \nu)$도 중심을 맞추어주어야하겠죠? 중심을 맞추는 방법은 단순한 평행이동이므로 이동특성을 활용하면 $(-1)^{x + y}$를 DFT를 적용한 뒤 곱해주면 저희가 원하는 중심에 딱 들어옵니다. 그 다음에 필터링 함수 $H(\mu, \nu)$를 곱해주면 되는 것이죠.
간단하게 필터링 효과를 알아보기 위해서 $H(\mu, \nu)$가 중심만 0이고 나머지에서는 1이라고 가정하겠습니다. 즉, dc 항만 빼고는 다 통과시키게 됩니다. dc 항을 0으로 만든다는 것은 어떤 의미를 가질까요? 일단 dc 항이 가진 의미를 곱씹어보면 대응되는 영상 공간에서의 평균 밝기를 의미합니다. 따라서 $H(\mu, \nu)$를 위에서 정의한대로 적용하면 대응되는 영상의 평균밝기가 0이 된다는 것이죠. 이에 대한 예시 그림은 아래와 같습니다.
아마 여기서 궁금하신 분들이 있을 겁니다. 평균 밝기값이 0이라는 의미는 어떤 화소값이 음수라는 점인데, 저희가 지금까지 배웠던 디지털 영상에서의 화소값은 0이상이 되어야 정확하기 때문입니다. 따라서 시각화를 위해서 위 영상에서 음수가 나오는 값은 그냥 0으로 바꾸어주었습니다. 그래서 원본 그대로 표현은 하지 않은 것이죠.
이번에는 주파수 공간의 특성에 대해서 생각해보도록 하겠습니다. 저주파 영역은 상대적으로 영상 내에 변화가 작은 곳을 의미합니다. 예를 들어 구름없는 하늘처럼 디테일이 적은 곳이겠죠. 고주파 영역은 저주파 영역과는 반대로 영상 내에 변화가 잦은 곳입니다. 예를 들어 엣지나 노이즈와 같이 밝기의 급격한 변화가 나타나는 곳이죠. 이쯤에서 예상하셨겠지만, 저주파를 통과시킬지, 고주파를 통과시킬지에 따라서 필터링 기법은 크게 2가지로 나뉘게 됩니다. 저주파를 통과시키면 "저역 통과 필터링(Low Pass Filtering)", 고주파를 통과시키면 "고역 통과 필터링(High Pass Filtering)"가 되는 것이죠. 이를 정리하면 아래와 같습니다.
- 저역 통과 필터링(Low Pass Filtering) : 저주파 통과 & 고주파 차단 $\rightarrow$ 고주파 차단으로 인한 영상 내 디테일(엣지, 코너) 감소
- 고역 통과 필터링(High Pass Filtering) : 저주파 차단 & 고주파 통과 $\rightarrow$ 저주파 차단으로 인한 영상 내 평균적인 밝기 감소
위의 그림은 실제로 $H(\mu, \nu)$를 바꾸어보며 필터링해본 결과입니다. 가장 왼쪽의 필터링 함수의 모양이 중앙 영역을 많이 통과시키고 상대적으로 고주파 영역은 많이 차단시키기 때문에 이는 저역 통과 필터링이라고 볼 수 있습니다. 그리고 필터링된 영상은 고주파 영역이 차단당했기 때문에 원본영상과 비교해보았을 때 비교적 엣지가 많이 죽어있게 됩니다.
그리고 중앙의 필터링 함수는 저주파 영역, 특히 dc 항을 0으로 만들고 나머지 저주파 영역도 많이 차단시킵니다. dc 항이 0이 되었기 때문에 이에 대응되는 영상의 평균 밝기값이 0이 된다는 것은 자명한 사실입니다. 그래서 실제로 영상이 많이 어두워졌죠. 그러나 상대적으로 엣지가 많이 살아있게 되었습니다.
중앙 필터링 함수와 같이 dc 항을 아예 0으로 만들어버릴수도 있지만 가장 오른쪽 필터처럼 완전히 차단하는 것이 아닌 어느정도 살릴 수도 있습니다. 그러면 평균 밝기값이 0이 나오지 않고 적당한 값을 유지할 수 있습니다. 그래서 상대적으로 완전히 차단한 것보다는 훨씬 밝은 값을 가지게 됩니다.
다시 한번 $g(x, y) = \mathcal{F}^{-1}\{H(\mu, \nu) F(\mu, \nu)\}$를 자세히 보도록 하겠습니다. 이때, 컨볼루션 정리에 의해서 주파수 공간에서의 곱은 영상 공간에서의 컨볼루션 연산과 쌍을 이룹니다. 그리고 이산 푸리에 변환이나 역푸리에 변환은 결과적으로 무한주기 시퀀스를 만들어내게 되죠. 여기서 중요한 점은 $H(\mu, \nu)$의 IDFT인 $h(x, y)$와 $f(x, y)$가 무한주기를 가지기 때문에 "둘러겹침 오차"가 발생할 수 있습니다. 따라서 0-패딩을 필수적인 과정이라고 볼 수 있습니다.
위의 영상은 0-패딩을 적용하지 않고 필터링을 하고 적용하고 필터링을 한 영상의 차이를 보여주고 있습니다. (b) 영상에서 흰색과 검은색의 경계가 블러링이 되는 것을 볼 수 있습니다. 그리고 영상의 윗쪽은 약간 검은색으로 바뀌고 아랫쪽은 약간 흰색으로 블러링이 되었습니다. 하지만 측면은 그렇지 않죠. 이는 균일하지 않은 결과로 이상적인 결과는 왼쪽과 같이 흰색의 측면은 검은색으로 블러링되고 검은색의 측면과 아랫쪽은 바뀌어서는 안됩니다. 그 이유는 아래와 같습니다.
위의 그림에서 왼쪽$g(x, y) = \mathcal{F}^{-1}\{H(\mu, \nu) F(\mu, \nu)\}$영상이 블러링된 영상의 (b)에 대응되고 오른쪽 영상이 블러링된 영상이 (c)에 대응됩니다. 0-패딩이라는 것은 1개의 주기 함수에서 사방으로 0으로 채우는 것을 의미합니다. 그래서 위의 그림을 보면 검은색 영역은 중앙선을 제외하고는 흰색으로 바뀔수가 없습니다.
아하~ 그래서 결론은 필터링하기 전에 0-패딩을 적용하면 모든 문제가 다 해결되는구나~가 아닙니다. 아쉽게도 단순하게 0-패딩을 적용하면 필터링된 영상 내에 인위적 구조물이 발생하기 때문에 이에 대해서도 적당하게 처리해주는 과정이 필요합니다. 일단 어떤 인위적 구조물이 발생하는 지 알아보도록 하겠습니다.
위 그림은 흔히 "물결파동(ringing) 현상"이라고 하는 인위적 구조물을 보여주고 있습니다. (a)와 같은 신호를 DFT를 적용하면 바로 아래의 (b)를 얻을 수 있습니다. 이를 위해서 적당한 크기의 패딩을 (c)와 같이 적용하여 다시 IDFT를 적용하면 저희가 원하는 영상은 다시 (a)가 나오는 것이지만 (d)가 나오게 됩니다. 보시면 중앙을 기준으로 굉장히 변동이 커서 마치 호수에 돌을 던진 순간과 같이 중앙으로부터 대칭적으로 파동이 퍼져가는 것처럼 보이게 됩니다. 이 현상을 물결파동 현상이라고 부르죠.
현상을 알았으니 원인을 알아보도록 하겠습니다. 결론부터 설명하면 0-패딩으로 인한 불연속때문에 발생하는 문제입니다. 따라서 이러한 불연속을 완화해줄수 있는 필터링을 사용하는 것이 중요합니다. 이를 방지하고자 사용하는 필터함수가 바로 Butterworth와 Gaussian(또우시안...)입니다. 물론 이러한 필터 함수들도 문제가 있습니다. 저희가 정확하게 저주파 영역만을 필터링하고 싶다고 가정하면 Butterworth나 Gaussian을 사용해버리면 어쩔 수 없이 고주파 영역도 약간은 통과시키게 됩니다. 결국에는 딜레마에 빠지게 됩니다. 이는 사용자가 적당히 선택해주어야겠습니다.
마지막으로 알아볼 것은 위상각이 특정 필터링에 불변성을 가진다것입니다. 일단, DFT가 복소수이기 때문에 실수부와 허수부로 표현할 수 있습니다($F(\mu, \nu) = R(\mu, \nu) + jI(\mu, \nu)$). 따라서 저희가 가지고 잇던 필터링 식은 아래와 같이 변하게 됩니다.
$$g(x, y) = \mathcal{F}^{-1}\left[H(\mu, \nu)R(\mu, \nu) + jH(\mu, \nu)I(\mu, \nu)\right]$$
그런데 위상각은 실수부와 허수부의 비로 만들어지는 것이기 때문에 어차피 $H(\mu, \nu)$는 상쇄되어 없어집니다. 따라서 이와 같이 특정 필터링에 대해서 위상각이 변하지 않는 필터를 "영 위상 이동(zero phase shift) 필터"라고 합니다. 일반적으로 위상각은 아래의 영상과 같이 아주 작은 변화조차도 엄청난 영향을 줍니다.
일련의 모든 과정들을 아래와 같이 정리할 수 있습니다.
- $M \times N$ 크기의 입력 영상 $f(x, y)$가 주어졌을 때 패딩할 크기 $P, Q$를 얻는다.(일반적으로 $P = 2M, Q = 2N$)
- STEP 1에서 얻은 $P, Q$를 바탕으로 필요한 수만큼 0을 $f(x, y)$에 추가하여 $P \times Q$ 크기의 패딩된 영상 $f_{p}(x, y)$를 얻는다.
- $f_{p}(x, y)$에 $(-1)^{x + y}$를 곱하여 변환을 중심으로 이동시킨다.
- STEP 3에서 얻은 영상의 DFT $F(\mu, \nu)$를 계산한다.
- 좌표 $(\frac{P}{2}, \frac{Q}{2})$가 중심인 $P \times Q$ 크기의 실수인 대칭 필터 함수 $H(\mu, \nu)$를 생성한다.
- 원소별 곱(elementary-wise product)를 이용해서 $G(i, k) = H(i, k)F(i, k)$를 사용하여 곱 $G(\mu, \nu) = H(\mu, \nu)F(\mu, \nu)$를 얻는다.
- 필터링된 함수 $g_{p}(x, y) = \{\text{real}\left[\mathcal{F}^{-1}\{G(\mu, \nu)\}\right]\}(-1)^{x + y}$를 이용하여 얻는다. 이때, 실수부를 사용하는 것은 복소 성분을 무시하기 위함이며 절댓값을 써도 상관없다.
- $g_{p}(x, y)$의 좌측 상단 사분면으로부터 $M \times N$ 영역을 추출하여 최종 처리된 결과 $g(x, y)$를 얻는다.
참고자료
[1]. digital image processing 4th edition rafael c. gonzalez
'image processing' 카테고리의 다른 글
디지털 영상 처리 - 주파수 도메인 필터를 이용한 영상 샤프닝 (0) | 2021.04.19 |
---|---|
디지털 영상 처리 - 주파수 도메인 필터를 이용한 영상 스무딩 (1) | 2021.04.16 |
디지털 영상 처리 - 2D DFT 특성 2 (0) | 2021.04.11 |
디지털 영상 처리 - 2D DFT 특성 1 (0) | 2021.04.10 |
디지털 영상 처리 - 2변수 함수로의 확장 (1) | 2021.04.07 |