가우시안 분포 형태의 마스크로 현재 화소와 가까울수록 가중치를 부여한 mask를 사용하는 필터링 기법
가우시안 분포 그래프
평균값 필터란?
주변 화소와의 산술 평균값으로 mask를 사용하는 필터링 기법
→ 즉, 가까이 있는 픽셀과 멀리 있는 픽셀이 모두 같은 가중치의 평균값으로 계산되기 때문에
멀리 있는 픽셀(본 픽셀과 관련성이 별로 없는 픽셀)의 영향을 받을 수 있다.
gaussian filter는
void cv::GaussianBlur (
InputArray src,
OutputArray dst,
Size ksize,
double sigmaX,
double sigmaY = 0,
int borderType = BORDER_DEFAULT
)
ksize
를 Size()
값을 사용하게 되면, sigma 값에 의해 결정된다.
9 x 9 사이즈의 mask를 사용한다면, 다음과 같이 GaussianFilter를 사용할 수 있다. (cpp
)
Mat myGaussianFilter(Mat img) {
Mat dstImg(img.size(), CV_8UC3);
GaussianBlur(img, dstImg, Size(9, 9), 0); // 마스크의 크기는 9x9로 지정하여 자체적으로 마스크 생성 후 연산
return dstImg;
}
자체적으로 구현을 하여 사용할 수 있으나, 실사용에선 GaussainBlur
함수를 사용하기에 함수 설명만 업로드 하였다!
Gaussian Filter를 적용하면서 히스토그램의 분포 균형이 조금 더 개선되었다.
Mat origin = imread("C:\\cv_img\\gear.jpg", 0);
imshow("origin", origin);
Mat blured;
for (int sigma = 1; sigma <= 5; sigma++) {
GaussianBlur(origin, blured, Size(), (double)sigma);
imshow(to_string(sigma), blured);
waitKey(0);
}
위의 코드를 사용하여 이미지 확인
sigma의 값이 커질수록 blur 효과도 커진다는 것을 확인할 수 있다.
Gaussian Filter를 적용하면서 Noise가 감소되었고, 블러링되었다.