더북(TheBook)

IppFilterMedean 함수는 입력 영상 imgSrc에 대해 3×3 크기의 정방형 마스크를 이용한 미디언 필터링을 수행하고, 그 결과를 imgDst에 저장한다. IppFilterMedian 함수의 구현은 소스 8-16에 나타내었다.

소스 8-16 미디언 필터 구현 함수(IppFilter.cpp)
#include <algorithm>void IppFilterMedian(IppByteImage& imgSrc, IppByteImage& imgDst)
{
    int w = imgSrc.GetWidth();
    int h = imgSrc.GetHeight();

    imgDst = imgSrc;

    BYTE** pSrc = imgSrc.GetPixels2D();
    BYTE** pDst = imgDst.GetPixels2D();

    int i, j;
    BYTE m[9];
    for (j = 1; j < h - 1; j++)
    for (i = 1; i < w - 1; i++)
    {
        m[0] = pSrc[j - 1][i - 1]; m[1] = pSrc[j - 1][i]; m[2] = pSrc[j - 1][i + 1];
        m[3] = pSrc[j][i - 1]; m[4] = pSrc[j][i]; m[5] = pSrc[j][i + 1];
        m[6] = pSrc[j + 1][i - 1]; m[7] = pSrc[j + 1][i]; m[8] = pSrc[j + 1][i + 1];

        std::sort(m, m + 9);

        pDst[j][i] = m[4];
    }
}

IppFilterMedian 함수에서 픽셀 값 정렬을 위해서 C++11에서 제공하는 sort 함수를 사용하였다. sort 함수의 원형은 아래와 같다.

template<class RandomAccessIterator>
void sort(RandomAccessIterator first, RandomAccessIterator last);

sort 함수는 정렬할 데이터의 첫 번째 원소의 주소와 마지막 원소의 바로 다음 주소를 인자로 받아 오름차순으로 정렬한다. C++ 표준으로 등록된 sort 함수는 템플릿 함수로 정의되어 있기 때문에, sort(m, m + 9); 형태로 코드를 작성하면 BYTE형 배열 m을 오름차순으로 정렬한다. 다만, std 네임스페이스에서 사용 가능하므로 실제 코드에서는 std::sort(m, m + 9); 형태로 코드를 추가하였다. sort 함수 사용을 위해 IppFilter.cpp 파일 상단에 #include <algorithm> 문장을 추가해야 한다.

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