2011-10-14 4 views
2

학교 프로젝트에서 가우시안 블러를 구현하려고합니다. 성능을 비교하려면 CPU와 GPU 구현을 모두 만들어야합니다.가우시안 블러와 FFT

나는 Gaussian blur가 어떻게 작동하는지 잘 모르겠다. 그래서 내 질문 중 하나가 올바르게 이해했다면 입니까?

는 Heres는 지금 무엇을 : 나는 필터를 계산하는 위키 피 디아 http://en.wikipedia.org/wiki/Gaussian_blur에서 방정식을 사용합니다. 2d의 경우 이미지의 각 픽셀의 RGB를 가져 와서 해당 픽셀의 RGB와 주변 픽셀을 관련 필터 위치에 곱하여 에 의해 필터를 적용합니다. 이 값은 새 픽셀 RGB 값으로 합계됩니다. 1d의 경우 먼저 필터를 수평으로 적용한 다음 가상으로 적용합니다. 올바르게 이해하면 에 동일한 결과가 나타납니다. 이 결과는 2D 필터가 적용된 것과 정확히 같은 결과입니까?

내가 가진 또 다른 질문은 알고리즘을 최적화 할 수있는 방법에 관한 것입니다. 나는 Fast Fourier Transform이 Gaussian blur에 적용된다는 것을 읽었습니다. 그러나 나는 그것을 연관시키는 방법을 알 수 없습니다. 누군가 내게 올바른 방향으로 힌트를 줄 수 있습니까?

감사합니다.

답변

5

예, 2D 가우스 커널은 separable이므로 두 개의 1D 커널로 적용 할 수 있습니다. 그러나 이러한 작업을 "제자리에"적용 할 수는 없습니다. 첫 번째 1D 통과 결과를 저장하려면 적어도 하나의 임시 버퍼가 필요합니다.

FFT 기반 컨볼 루션은 큰 커널을 가지고있을 때 유용합니다. 이는 가우시안뿐만 아니라 모든 종류의 필터에 적용됩니다. "큰"크기는 아키텍처에 따라 다르지만 49x49 커널보다 작은 크기의 FFT 기반 방법을 사용하는 것에 대해 걱정하지 않으려 고합니다. 일반적인 방법은 다음

  • FFT 화상 이미지의 크기를 패딩
  • FFT 커널
  • 가 주파수 영역에서 2 개를 (공간 도메인에서 컨볼 루션 상당)
  • 곱 결과를 IFFT (역 FFT)하면

두 개 이상의 이미지에 필터를 적용하는 경우 채워진 커널을 한 번만 FFT하면됩니다. 이미지 당 하나의 포워드와 하나의 역행렬을 수행하기 위해서는 적어도 두 개의 FFT가 있어야합니다. 이것이이 기술이 큰 커널의 계산상의 승리가되는 이유입니다.

+2

FFT를 통해 빠른 컨볼 루션을 사용하는 경우 이미지와 커널을 이미지 + 커널의 크기로 채워야 할 수도 있습니다. 그렇지 않으면 가장자리 근처에서 순환 랩 어라운드 인공물로 끝날 수 있습니다. – hotpaw2

+0

당신이 피할 수있는 한 가지 방법은 샘플러 어드레싱 모드가 텍스처를 "미러링"하도록 설정하는 것입니다. – bluejamesbond