이번 글에서는 평균값 필터(mean filter)에 대해 알아보겠습니다.
영상 처리 기법 중에는 영상을 부드럽게 만드는 블러링 기법이 있습니다. 아래 두 이미지 중 두번째 이미지가 블러링 처리된 이미지 입니다.
영상을 부드럽게 처리하는 것은 경계면에서 급격하게 변화하는 곳을 완만하게 처리하는 것입니다.
평균값 필터는 영상을 부드럽게 만드는 블러링에 사용되는 필터 중 하나입니다.
평균값 필터는 모든 원소값이 1로 되어있고 원소 개수만큼 나누면 됩니다.
평균값 필터의 크기가 커질수록 영상이 더 부드럽게 처리되지만 연산량이 증가하게됩니다.
filter2D 함수를 이용한 평균값 필터 샘플 코드는 아래와 같습니다.
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 함수를 사용하면 간단하게 구현할 수 있습니다.
blur(src, dst, Size(5, 5));
실행 결과는 아래와 같습니다.