如何以最快的速度实施高斯模糊 http://en.wikipedia.org/wiki/Gaussian_blur算法?
我要用Java来实现它,所以GPU http://en.wikipedia.org/wiki/Graphics_processing_unit解决方案被排除。我的应用程序,行星创世纪 http://planetGenesis.sourceforge.net,是跨平台的,所以我不想JNI http://en.wikipedia.org/wiki/Java_Native_Interface.
您应该使用高斯核是可分离的这一事实,即。 e.您可以将 2D 卷积表示为两个 1D 卷积的组合。
如果滤波器很大,那么使用空间域中的卷积相当于频域(傅立叶)域中的乘法这一事实也可能有意义。这意味着您可以对图像和滤波器进行傅里叶变换,将(复数)结果相乘,然后进行傅里叶逆变换。 FFT(快速傅立叶变换)的复杂度为 O(n log n),而卷积的复杂度为 O(n^2)。此外,如果您需要使用相同的滤镜模糊许多图像,则只需对滤镜进行一次 FFT。
如果您决定使用 FFT,FFTW库 http://www.fftw.org是一个不错的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)