Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 高斯模糊与FFT_Image Processing_Fft_Blur_Gaussian - Fatal编程技术网

Image processing 高斯模糊与FFT

Image processing 高斯模糊与FFT,image-processing,fft,blur,gaussian,Image Processing,Fft,Blur,Gaussian,我正试图为一个学校项目实现高斯模糊。 我需要做一个CPU和一个GPU实现来比较性能 我不太确定我是否理解高斯模糊是如何工作的。所以我的一个问题是 如果我理解正确的话 我现在做的是: 我用维基百科上的方程式来计算 过滤器。 对于2d,我获取图像中每个像素的RGB,并通过 将像素和周围像素的RGB与关联的滤波器位置相乘。 然后将这些值相加为新的像素RGB值。 对于1d,我首先水平地应用过滤器,然后垂直地应用过滤器,这将给出 如果我理解正确,结果也是一样的。 此结果是否与应用2d过滤器时的结果完全相同

我正试图为一个学校项目实现高斯模糊。 我需要做一个CPU和一个GPU实现来比较性能

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

我现在做的是: 我用维基百科上的方程式来计算 过滤器。 对于2d,我获取图像中每个像素的RGB,并通过 将像素和周围像素的RGB与关联的滤波器位置相乘。 然后将这些值相加为新的像素RGB值。 对于1d,我首先水平地应用过滤器,然后垂直地应用过滤器,这将给出 如果我理解正确,结果也是一样的。 此结果是否与应用2d过滤器时的结果完全相同

我的另一个问题是如何优化算法。 我已经读到快速傅里叶变换适用于高斯模糊。 但我想不出如何把它联系起来。 有人能给我一个正确方向的提示吗


谢谢。

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

基于FFT的卷积是一个有用的优化,当你有大的内核-这适用于任何类型的滤波器,而不仅仅是高斯。“大”到底有多大取决于您的体系结构,但您可能不想担心对任何小于(比如)49x49内核的东西使用基于FFT的方法。一般做法是:

  • 对图像进行FFT处理
  • FFT内核,填充到图像的大小
  • 在频域中将两者相乘(相当于空间域中的卷积)
  • IFFT(逆FFT)结果

请注意,如果要对多个图像应用相同的过滤器,则只需对填充的内核进行一次FFT。但是,每个图像至少要执行两个FFT(一个正向和一个反向),这就是为什么这种技术只会成为大型ish内核的计算胜利。

通过FFT使用快速卷积时,可能需要将图像和内核填充到图像+内核的大小,否则,您可能会在边缘附近出现圆形环绕瑕疵。可以避免这种情况的一种方法是将采样器寻址模式设置为“镜像”纹理。请注意,填充是在应用FFT之前完成的,并且乘法是复杂乘法。