[OpenCV] 블러링

zzwon1212·2023년 10월 29일
0

OpenCV

목록 보기
13/16
post-thumbnail

정규분포를 만났다.
통계는 언제나 반갑다.

1. 평균값 필터(mean)

1.1. 개요

  • 각 좌표에서 주변 픽셀값들의 산술 평균을 계산하여 출력 영상의 픽셀값으로 설정

  • 영상에 평균값 필터를 적용하면 인접한 픽셀 간의 급격한 그레이스케일 값 변화가 줄어들어서, 날카로운 에지가 무뎌지고 영상에 있는 잡음이 감소하는 효과를 얻을 수 있다.

  • 단점: 필터링 대상 위치로부터의 거리를 고려하지 않고 모두 같은 가중치를 사용하여 계산하므로, 마스크 크기가 커짐에 따라 현재 위치의 픽셀값 비중은 줄어들고, 상대적으로 멀리 있는 픽셀들의 영향이 커진다.

1.2. OpenCV 함수

  • blur(): 평균값 필터를 이용한 블러링 함수
    void blur(InputArray src, OutputArray dst, Size ksize,
              Point anchor = Point(-1, -1), int borderType = BORDER_DEFAULT);

1.3. 적용 결과

  • 마스크 크기가 커질수록 평균값 필터의 결과가 더욱 부드러워지지만, 더 많은 연산량이 필요하다.

2. 가우시안 필터(Gaussian)

2.1. 개요

  • 정규분포를 이용한다.

  • 1차원

    Gμ,σ(x)=1σ2πe12(xμσ)2G_{\mu, \sigma}(x) = {1 \over \sigma \sqrt{2\pi}} e^{-{1 \over 2}({x - \mu \over \sigma})^2}
  • 2차원

    Gσ(x,y)=12πσ2ex2+y22σ2G_\sigma(x, y) = {1 \over 2 \pi \sigma^2} e^{-{x^2 + y^2 \over 2\sigma^2}}
  • 2차원 가우시안 필터 마스크의 크기

    • 정규분포의 특성을 고려하여 (8σ+1)(8\sigma+1) 또는 (6σ+1)(6\sigma+1)로 구성한다.

2.2. OpenCV 함수

  • GaussianBlur(): 가우시안 필터를 이용한 블러링 함수
    void GaussianBlur(InputArray src, OutputArray dst, Size ksize,
                      double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT);
    • ksize: 가우시안 커널 크기. Size()를 지정하면 sigma 값에 의해 자동으로 결정됨.

3.3. 적용 결과

  • σ\sigma값을 키울수록 블러 효과가 강해진다.
  • 아래 그림의 좌측은 평균 필터, 우측은 가우시안 필터를 적용한 결과이다. 커널의 크기가 7x7로 같지만, 가우시안 필터가 좀 더 자연스러운 결과를 보인다. 이는 평균 필터가 가우시안 필터에 비해 커널에서 거리가 먼 픽셀들의 비중이 높기 때문이다.

📙강의 - 강사 황선규

profile
JUST DO IT.

0개의 댓글