이번 글에서는 평균값 필터(mean filter)에 대해 알아보겠습니다.
영상 처리 기법 중에는 영상을 부드럽게 만드는 블러링 기법이 있습니다. 아래 두 이미지 중 두번째 이미지가 블러링 처리된 이미지 입니다.
영상을 부드럽게 처리하는 것은 경계면에서 급격하게 변화하는 곳을 완만하게 처리하는 것입니다.
평균값 필터는 영상을 부드럽게 만드는 블러링에 사용되는 필터 중 하나입니다.
평균값 필터는 모든 원소값이 1로 되어있고 원소 개수만큼 나누면 됩니다.
평균값 필터의 크기가 커질수록 영상이 더 부드럽게 처리되지만 연산량이 증가하게됩니다.

filter2D 함수를 이용한 평균값 필터 샘플 코드는 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Mat src = imread( "lenna.bmp" , IMREAD_GRAYSCALE); if (src.empty()) { cerr << "Image load failed!" << endl; return ; } // 5 X 5의 필터링을 만듦 float data[25] ={0,}; int iCount = sizeof (data) / sizeof (data[0]); for ( int i = 0 ; i < iCount ; i++) data[i] = 1./iCount; Mat blurr(5, 5, CV_32FC1, data); Mat dst; filter2D(src, dst, -1, blurr, Point(-1, -1), 0); imshow( "src" , src); imshow( "dst" , dst); waitKey(); destroyAllWindows(); |
blur 함수를 사용하면 간단하게 구현할 수 있습니다.
1 | blur(src, dst, Size(5, 5)); |
실행 결과는 아래와 같습니다.