高斯模糊和FFT

问题描述 投票:4回答:1

我正在尝试为学校项目实现高斯模糊。我需要同时使用CPU和GPU来比较性能。

我不太确定我是否了解高斯模糊的工作原理。所以我的问题之一是如果我理解正确的话?

[这里是我现在要做的:我使用维基百科http://en.wikipedia.org/wiki/Gaussian_blur中的公式进行计算过滤器。对于2d,我获取图像中每个像素的RGB并对其应用滤镜将像素和周围像素的RGB与相关的滤镜位置相乘。然后将这些总和作为新的像素RGB值。对于1d,我先水平然后再弱地应用滤镜,这应该如果我理解正确,结果也是一样。此结果与应用2d滤镜时的结果完全相同吗?

我还有一个关于如何优化算法的问题。我读过快速傅里叶变换适用于高斯模糊。但是我不知道如何关联它。有人可以向我提示正确的方向吗?

谢谢。

image-processing fft blur gaussian
1个回答
7
投票

是,二维高斯内核是separable,因此您可以将其作为两个1D内核来应用。请注意,您不能“就地”应用这些操作-您至少需要一个临时缓冲区来存储第一个1D通道的结果。

基于FFT的卷积是有用的优化,当您拥有大内核时-这适用于任何类型的滤波器,而不仅仅是高斯滤波器。 “大”到底有多大取决于您的体系结构,但您可能不希望担心对小于49x49内核的任何事物使用基于FFT的方法。通用方法是:

  • FFT图像
  • FFT内核,填充到图像的大小
  • 在频域中将二者相乘(相当于在空间域中的卷积)
  • IFFT(逆FFT)结果>>
  • 请注意,如果您将同一个滤镜应用于多个图像,则只需对填充内核进行一次FFT。但是,每个图像仍然至少要执行两个FFT(一个正向和一个逆向),这就是为什么这种技术仅在大型内核中成为计算上的胜利。]

© www.soinside.com 2019 - 2024. All rights reserved.