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