最快的高斯模糊实现

2022-09-01 02:47:07

如何实现最快的高斯模糊算法?

我将在Java中实现它,因此GPU解决方案被排除在外。我的应用程序planetGenesis是跨平台的,所以我不想要JNI


答案 1

您应该使用高斯核是可分的事实,即您可以将2D卷积表示为两个1D卷积的组合。

如果滤波器很大,则使用空间域中的卷积等效于频率(傅里叶)域中的乘法这一事实也可能是有意义的。这意味着您可以采用图像和滤波器的傅里叶变换,乘以(复数)结果,然后取逆傅里叶变换。FFT(快速傅里叶变换)的复杂度为O(n log n),而卷积的复杂度为O(n^2)。此外,如果您需要使用相同的滤镜模糊许多图像,则只需拍摄一次滤镜的FFT。

如果您决定使用FFT,FFTW库是一个不错的选择。


答案 2

数学家们很可能知道这一点,但对于其他人来说。

由于高斯的数学属性很好,您可以通过首先在图像的每一行上运行一维高斯模糊,然后在每列上运行一维模糊来快速模糊2D图像。