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> 문장을 추가해야 한다.

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