더북(TheBook)

OnFourierFft 함수의 시작 부분에서는 IsPowerOf2 함수를 이용하여 입력 영상의 가로, 세로 크기가 2의 승수인지를 확인하고 있다. OnFourierFft 함수는 입력 영상의 가로 크기와 세로 크기 모두 2의 승수이어야만 고속 이산 푸리에 변환 및 역변환을 수행하도록 하였다. 만약 가로 또는 세로 픽셀의 크기가 2의 승수가 아니라면 AfxMessageBox 함수를 이용하여 “가로 또는 세로의 크기가 2의 승수가 아닙니다” 문자열을 출력한 후, 함수가 종료된다. OnFourierFft 함수의 나머지 부분은 10.2절에서 설명한 OnFourierDft 또는 OnFourierDftrc 함수와 거의 동일하다. 즉, 입력 영상에 대하여 고속 푸리에 변환과 고속 푸리에 역변환을 하여 입력 영상을 복원하고, 그 연산 시간을 정보 출력창에 표시한다.

그림 10-15는 ImageTool 프로그램에서 실제 영상에 대하여 DFT, DFTRC, FFT 메뉴를 각각 수행한 결과이다. FFT 연산은 충분히 큰 영상에 대해서도 빠른 연산 결과를 보여주기 때문에 이번에는 256×256 크기의 영상인 camera.bmp 파일을 입력 영상으로 사용하였다. 그리고 정확한 푸리에 변환 및 역변환 속도 측정을 위하여 스펙트럼 영상과 위상각 영상은 화면에 나타나지 않도록 하였다. 각각의 메뉴에 의해 생성된 영상은 입력 영상과 완전히 동일하지만, 그 결과 영상을 만드는 시간에는 엄청난 차이가 있다. ImageTool 프로그램 하단의 영상 정보 출력창에 주목해보자. DFT 방법이 무려 737초가 걸릴 것을 확인할 수 있다. 이에 반해 DFTRC는 약 5초의 시간이 소요되었고, FFT 방법은 단지 15밀리초 정도의 시간밖에 걸리지 않았다. 푸리에 변환을 어떤 알고리즘으로 구현하느냐에 따라 얼마나 많은 시간을 절약할 수 있는지 확실하게 체감할 수 있는 결과이다.

그림 10-15 ImageTool 프로그램에서 DFT, DFTRC, FFT 실행 결과 비교
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.