[OpenCV] 블러링 – 평균값 필터

이번 글에서는 평균값 필터(mean filter)에 대해 알아보겠습니다.

영상 처리 기법 중에는 영상을 부드럽게 만드는 블러링 기법이 있습니다. 아래 두 이미지 중 두번째 이미지가 블러링 처리된 이미지 입니다.

일반

블러링

영상을 부드럽게 처리하는 것은 경계면에서 급격하게 변화하는 곳을 완만하게 처리하는 것입니다.

평균값 필터는 영상을 부드럽게 만드는 블러링에 사용되는 필터 중 하나입니다.
평균값 필터는 모든 원소값이 1로 되어있고 원소 개수만큼 나누면 됩니다.

3 X 3 평균값 필터

평균값 필터의 크기가 커질수록 영상이 더 부드럽게 처리되지만 연산량이 증가하게됩니다.

5 X 5 평균값 필터

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));

실행 결과는 아래와 같습니다.