Ste*_*fen 3 fft image-processing gaussian blur
我正在尝试为学校项目实施高斯模糊.我需要制作CPU和GPU实现来比较性能.
我不太清楚我是否理解高斯模糊是如何工作的.所以我的一个问题是我是否理解正确?
以下是我现在所做的事情:我使用维基百科http://en.wikipedia.org/wiki/Gaussian_blur中的等式来计算过滤器.对于2D,我采用图像中每个像素的RGB,并通过将像素的RGB和周围像素与相关的滤波器位置相乘来应用滤波器.然后将它们相加为新的像素RGB值.对于1d我首先水平地应用滤波器,然后是静态地应用滤波器,如果我理解正确的话,这应该给出相同的结果.这个结果与应用2d滤波器的结果完全相同吗?
我的另一个问题是如何优化算法.我已经读过快速傅立叶变换适用于高斯模糊.但我无法弄清楚如何联系它.有人能给我一个正确方向的暗示吗?
谢谢.
是的,2D高斯内核是可分离的,因此您可以将其应用为两个一维内核.请注意,您无法"就地"应用这些操作 - 但是您需要至少一个临时缓冲区来存储第一个1D传递的结果.
当你有大内核时,基于FFT的卷积是一个很有用的优化 - 这适用于任何类型的滤波器,而不仅仅是高斯滤波器."大"的大小取决于您的体系结构,但您可能不想担心使用基于FFT的方法来处理比49x49内核更小的方法.一般方法是:
请注意,如果您将滤镜应用于多个图像,则只需要填充内核一次FFT.您仍然至少有两个FFT来执行每个图像(一个正向和一个反向),这就是为什么这种技术只能成为大型内核的计算胜利.