더북(TheBook)

LowPassGaussian 함수는 가우시안 저역 통과 필터를 구현한 함수이고, HighPassGaussian 함수는 가우시안 고역 통과 필터를 구현한 함수이다. 각각의 함수는 정수형의 인자 cutoff를 받으며, 이는 차단 주파수의 크기를 나타낸다. LowPassGaussian 함수와 HighPassGaussian 함수의 전체 내용은 소스 10-12에 나타내었다.

소스 10-12 주파수 공간에서의 가우시안 저역 및 고역 통과 필터(IppFourier.cpp)
void IppFourier::LowPassGaussian(int cutoff)
{
    register int i, j, x, y;
    double dist2, hval;

    int cx = width / 2;
    int cy = height / 2;

    double** pRe = real.GetPixels2D();
    double** pIm = imag.GetPixels2D();

    for (j = 0; j < height; j++)
    for (i = 0; i < width; i++)
    {
        x = i + cx;
        y = j + cy;

        if (x >= width) x -= width;
        if (y >= height) y -= height;

        dist2 = static_cast<double>((x - cx)*(x - cx) + (y - cy)*(y - cy));

        hval = exp(-dist2 / (2 * cutoff * cutoff));

        pRe[j][i] *= hval;
        pIm[j][i] *= hval;
    }
}
  
void IppFourier::HighPassGaussian(int cutoff)
{
    register int i, j, x, y;
    double dist2, hval;

    int cx = width / 2;
    int cy = height / 2;

    double** pRe = real.GetPixels2D();
    double** pIm = imag.GetPixels2D();

    for (j = 0; j < height; j++)
    for (i = 0; i < width; i++)
    {
        x = i + cx;
        y = j + cy;

        if (x >= width) x -= width;
        if (y >= height) y -= height;

        dist2 = static_cast<double>((x - cx)*(x - cx) + (y - cy)*(y - cy));

        hval = 1.0 - exp(-dist2 / (2 * cutoff * cutoff));

        pRe[j][i] *= hval;
        pIm[j][i] *= hval;
    }
}
Note | 버터워스 필터(Butterworth filter)

가우시안 저역 및 고역 필터와 같이 필터의 모양을 점진적으로 변하게 설계한 필터 중 버터워스 필터라는 것이 있다. 이 필터의 식은 다음과 같다.

위 식에서 n은 필터 경사의 완만도를 결정하는 상수이다. 버터워스 필터는 가우시안 필터보다 그 값의 변화가 차단 주파수에서 더욱 뚜렷하게 나타나는 특징이 있다.

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