개발한 것들

FFT와 모아레 제거 프로그램

다크pgmr 2013. 1. 28. 13:24

글 말미에 첨부된 프로그램은 FFT(Fast Fourier Transform)을 이용해서 이미지의 스펙트럼(spectrum)을 확인하고 수정하면서 영상의 다양한 주파수 특성을 테스트할 수 있는 프로그램입니다. 또한 이미지에 나타난 모아레(moire) 패턴을 제거할 수 있는 기능을 포함하고 있습니다.



 

예전에 FFT를 이용해서 모아레를 제거하기 위해 구현해 보았던 것인데, 이번에 포스팅을 하면서 FFT의 개념을 익히고 FFT의 효과를 직접 테스트해 볼 수 있는 일종의 교육용 소프트웨어 형태로 수정해 보았습니다. 자동 모아레 제거 기능은 단순한 방법만 포함시켜서 잘 안되는 경우도 있을 것입니다. 나중에 시간이 되면 밝기보정, 저주파 영역 처리 등 모아레 제거 기능을 보완한 버전을 올려보도록 하겠습니다.

 

푸리에 변환이란?

 

먼저, 푸리에 변환(Fourier Transform, FT)에 대해 간단히 설명을 드리겠습니다. 참고로, FFT는 푸리에 변환을 빠르게 계산할 수 있는 알고리즘을 지칭합니다. 푸리에 변환이란 어떤 시간 도메인(time domain)에서 표현된 신호(signal)를 주파수 도메인(frequency domain)에서의 표현으로 변환해주는 것을 말합니다. 예를 들어, 음파를 생각하면 시간축에 따라서 위아래로 요동치는 파형이 상상될 것입니다. 우리가 흔히 생각하는 방식은 이와같이 time domain에서 표현하는 방식입니다. 이를 frequency domain에서는 신호가 어떤 주파수 성분으로 구성되어 있는지로 표현합니다.

 

아래 그림은 3Hz로 진동하는 신호의 파형(왼쪽 그림) 및 이를 FT를 통해 주파수 도메인으로 변환한 예(오른쪽 그림)를 보여줍니다. 오른쪽 그림에 보면 주파수 3에 해당하는 지점에서 그래프가높은 값을 나타냄을 볼 수 있고 역으로 이를 통해 원래 신호가 3Hz의 강한 주기성을 가짐을 파악할 수 있습니다.

 

그림 출처: http://en.wikipedia.org/wiki/Fourier_transform

 

영상처리에서는 2차원 푸리에 변환을 사용합니다. 이는 영상을 x축 또는 y축 방향으로 따라가면서 픽셀의 밝기 변화를 파형 또는 신호로 보고 주파수 분석을 적용하는 것입니다. 푸리에 변환을 통해 얻은 각 주파수 성분의 강도를 스펙트럼(spectrum)이라고 부르는데 스펙트럼도 이미지처럼 표현이 가능합니다.

 

모아레(Moire)란

 

두 개의 격자 패턴을 서로 겹쳐놓으면 물결 모양의 어떤 새로운 주기성을 가진 패턴이 생성되는데 이를 모아레 패턴이라고 부릅니다. 가장 손쉽게 모아레 패턴을 확인할 수 있는 방법은 여러분이 가진 휴대폰 카메라로 모니터 화면을 찍어보면 됩니다. 아래 그림은 모아래가 포함된 사진(왼쪽)과 이를 첨부한 프로그램을 이용하여 모아레 제거한 사진(오른쪽)을 보여줍니다.

 


 

프로그램 사용법

 

먼저, 첨부된 프로그램을 실행시키면 다음과 같은 GUI 화면이 나옵니다.

 

 

처음의 "Load Image" 버튼을 이용하여 이미지 파일을 선택하면 아래 그림과 같이 입력 영상(왼쪽)과 이를 푸리에 변환한 스펙트럼 영상(오른쪽)을 같이 보여줍니다. 

 


스펙트럼 영상에서 중심 부분은 저주파 영역, 테두리 부분은 고주파 영역을 나타냅니다. 모아레 제거를 위해서는 모아레 패턴에 해당하는 주파수 대역을 스펙트럼에서 제거해야 합니다. 스펙터럼 영상에 마우스를 가져다 대고 드래그(drag)를 하면 아래 그림과 같이 원하는 사각형 영역을 제거할 수 있습니다.

 

 

모아레 제거를 할때 스펙트럼 영상의 중심에 있는 밝은 부분은 건드리면 안됩니다. 이 부분은 영상의 전체적인 밝기 및 원본 영상의 주요 패턴을 나타내는 부분입니다. 모아레 패턴은 비교적 고주파 반복 패턴이기 때문에 위 그림과 같이 테두리 부근에서 밝게 빛나는 부분을 제거해 주면 됩니다. 이와 같이 원하는 주파수 대역을 제거한 후에  "Inverse FFT" 버튼을 눌러서 푸리에 역변환을 하면 아래 그림과 같이 특정 주파수 패턴이 제거된 영상을 얻을 수 있습니다.

 

 

마지막으로, 세번째 "Remove Moire" 버튼을 누르면 위의 모아레 제거 과정을 자동으로 처리하여 복원된 영상을 보여줍니다. 자동 복원이 잘 되지 않을 경우에는 'radius' 파리미터와, 'threshold' 파라미터를 적절히 조절해 보시기 바랍니다. 'radius'를 줄일수록 모아레 제거가 잘되지만 원본 이미지 손상이 큽니다. 'threshold'는 작은 값을 줄수록 모아레 제거는 잘 됩니다 (대신 원본 손상도 큽니다). 


프로그램 다운로드:


fft_tool.zip


by 다크 프로그래머