그러면 실제 가중 평균 값 필터를 수행하는 함수를 작성해보자. 함수의 이름은 IppFilter WeightedMean을 사용하기로 하고, IppFilter.h 파일에 아래와 같이 함수 선언을 추가하자.
void IppFilterWeightedMean(IppByteImage& imgSrc, IppByteImage& imgDst);
IppFilterWeightedMean 함수는 입력 영상 imgSrc에 대해 3×3 크기의 마스크를 이용한 가중 평균 값 필터링을 수행하고, 그 결과를 imgDst에 저장한다. IppFilterWeightedMean 함수의 전체 구현은 소스 8-3에 나타내었다. IppFilterWeightedMean 함수는 앞서 살펴봤던 평균 값 필터 함수 IppFilterMean과 그 구조가 거의 유사하다. 다만 mask 배열 값에서만 차이가 있을 뿐이다.
void IppFilterWeightedMean(IppByteImage& imgSrc, IppByteImage& imgDst) { int w = imgSrc.GetWidth(); int h = imgSrc.GetHeight(); imgDst = imgSrc; BYTE** pSrc = imgSrc.GetPixels2D(); BYTE** pDst = imgDst.GetPixels2D(); int mask[3][3] = { { 1, 2, 1 }, { 2, 4, 2 }, { 1, 2, 1 }, }; int i, j, m, n, sum; for (j = 1; j < h - 1; j++) for (i = 1; i < w - 1; i++) { sum = 0; for (m = 0; m < 3; m++) for (n = 0; n < 3; n++) { sum += (pSrc[j - 1 + m][i - 1 + n] * mask[m][n]); } pDst[j][i] = static_cast<BYTE>(limit(sum / 16. + 0.5)); } }