가우시안 필터 : 가우시안 스무딩(Gaussian smoothing) 빠르게 배우기

2.Gaussian Smoothing

Insight with Gaussian smoothing

가우시안 필터 빠르게 실행하기.

Gaussian Filter

g(i,j)=12πσ2×exp(i2+j2)2σ2g(i,j) = \frac{1}{2\pi\sigma^2}\times\exp^{-(i^2 + j^2)\over2\sigma^2}

가우시안필터의 특징은 i, j = (0, 0)일 때 가장 큰 값을 갖고 원점에서 멀어질 수록 점점 함수값이 작아진다.

Gaussian Smoothing

이를 사용해서 가우시안 필터를 이미지에 컨볼루션을 적용해주면 필터링이 가능해지는데 식은 다음과 같다.
1.

2. 식을 분리할 수 있다.

2차원 필터보다 빠른 1차원 필터

  • 2차원 필터는 참으로 느리다.

1번 식에서 사용하는 필터는 2차원 필터로 한번 컨볼루션을 하는데 총 O(n x m)의 복잡도가 필요하다. 컨볼루션이 항상 그런것처럼 당연하다고 여길 수 있는데 재미있는 건 계산을 훨씬 더 줄일 수 있다는 것이다. 이미지의 사이즈가 PxQ 이고 필터의 사이즈가 m, n라고 해보자. 1번 과정은 약 PQmn의 시간이 필요할 거다.

1차원 수평 필터는 행에 따라서 값이 달라질 필요가 없다는 사실을 기억하자.
2번 식을 살펴보면 expn22σ2\exp^{-n^2\over{2\sigma^2}}이고 이는 다음과 같은 1차원 필터이다. 이 1차원 수평 필터를 적용해서 계산한 후에 시그마로 합쳐주면 하나의 스칼라 값이 나온다. PQ의 이미지 사이즈에 1차원 가우시안 필터와 컨볼루션을 계산하는데 드는 시간은 PQn이 들 것이다. 1차원 수평 필터의 값은 행에 따라서 변하지 않기 때문에 우리는 재 계산할 필요없이 PxQ개의 값들을 한 번에 1차원 수직 필터에 적용할 수 있다. 이 때 약 PQm의 시간이 소요됨으로 PQ(m + n)이 되어 성능 향상을 볼 수 있다.

댓글

이 블로그의 인기 게시물

[Linux, Unix] export, echo 명령어 알아보기

IEEE 754 부동 소수점 반올림과 근사