더북(TheBook)

IppFourier 클래스의 멤버 함수에 대한 설명을 하기에 앞서, 먼저 IppFourier 클래스의 멤버 변수에 대하여 살펴보자. IppFourier 클래스에는 다음과 같이 네 개의 멤버 변수가 정의되어 있다.

int width;
int height;
IppDoubleImage real; // 실수부
IppDoubleImage imag; // 허수부

정수형으로 선언된 widthheight 멤버 변수는 푸리에 변환을 수행할 영상의 가로와 세로 크기를 저장한다. IppDoubleImage 타입으로 선언된 realimag 멤버 변수에는 푸리에 변환된 결괏값의 실수부와 허수부를 저장할 것이다. 실수형 데이터를 저장할 수 있는 realimag 영상의 크기는 입력 영상의 크기와 동일하다. realimag 영상이 처음부터 푸리에 변환된 결괏값을 저장하는 것은 아니다. 처음 SetImage 함수를 호출하여 입력 영상 정보를 설정할 때에는 real 멤버 변수에 입력 영상의 값을 double 타입으로 형변환하여 픽셀 값을 저장한다. 그리고 imag 영상의 모든 픽셀 값은 0으로 초기화한다. 이후 DFT, DFTRC, FFT 등의 멤버 함수를 호출하여 이산 푸리에 변환을 수행한 후에는 주파수 성분의 값이 realimag에 각각 저장될 것이다. 이산 푸리에 역변환을 수행할 경우에는 역변환되어 구해진 값이 realimag에 저장된다.

다음으로는 소스 10-3에 나타나 있는 IppFourier 클래스의 멤버 함수와 전역 함수에 대하여 알아보자. 이들 함수에 대한 설명은 각각 표 10-1과 표 10-2에 각각 정리하였다.

표 10-1 IppFourier 클래스의 멤버 함수 설명

함수 이름

함수 설명

IppFourier()

생성자 함수. 멤버 변수의 값들을 초기화한다.

SetImage(IppByteImage& img)

width, height 멤버 변숫값을 설정하고, 입력 영상을 real 영상에 복사한다. imag 영상은 0으로 초기화한다.

GetImage(IppByteImage& img)

real 영상을 IppByteImage 타입의 영상 img로 복사한다.

GetSpectrumImage(IppByteImage& img)

푸리에 변환 후 호출되어, 푸리에 스펙트럼 영상을 생성한다.

GetPhaseImage(IppByteImage& img)

푸리에 변환 후 호출되어, 위상값 영상을 생성한다.

DFT(int dir)

영상의 이산 푸리에 변환 또는 역변환을 수행한다. dir 값이 1이면 순방향 변환, -1이면 역방향 변환을 수행한다.

DFTRC(int dir)

영상의 행과 열을 분리하여 영상의 이산 푸리에 변환 또는 역변환을 수행한다.

FFT(int dir)

영상의 고속 이산 푸리에 변환 또는 역변환을 수행한다.

LowPassIdeal(int cutoff)

주파수 공간에서 이상적 저역 통과 필터를 수행한다.

HighPassIdeal(int cutoff)

주파수 공간에서 이상적 고역 통과 필터를 수행한다.

LowPassGaussian(int cutoff)

주파수 공간에서 가우시안 저역 통과 필터를 수행한다.

HighPassGaussian(int cutoff)

주파수 공간에서 가우시안 고역 통과 필터를 수행한다.

표 10-2 IppFourier.h에 나오는 전역 함수 설명

함수 이름

함수 설명

DFT1d(double* re, double* im, int N, int dir)

re와 im 배열에 저장된 값을 이용하여 이산 푸리에 변환 또는 역변환을 수행한다. N은 배열의 크기를 나타낸다. dir 값이 1이면 순방향 변환, -1이면 역방향 변환을 수행한다. 푸리에 변환 결과는 다시 re와 im 배열에 저장된다.

FFT1d(double* re, double* im, int N, int dir)

고속 이산 푸리에 변환 또는 역변환을 수행한다. 인자에 대한 설명은 DFT1d와 동일하다.

IsPowerOf2(int n)

n이 2의 승수로 표현되는 수이면 true를 반환하고, 아니면 false를 반환한다. FFT1d 함수에서 사용된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.