到目前为止,我已经完全在空间域中实现了高斯模糊滤波器,利用了高斯的可分离性,即沿着行应用1D高斯核,然后沿着图像的列应用.这工作得很好.
现在,仅给出空间域的NxN卷积矩阵的大小N,我想在频域上实现完全相同的模糊图像.这意味着我将图像加载到矩阵中(numpy,我正在使用python),对它应用FFT(然后我有G(x,y)),然后我还必须有一个滤波器H( u,v)在频域中,它也类似于某些2d高斯的形状,其中心值为1.0,然后值越来越偏离0离我的中心越远.然后我在频域中进行乘法(在我必须考虑进行H的中心偏移之前)然后应用iFFT.
我遇到的麻烦是找到导致相应H(u,v)的确切公式(即找到sigma,std-deviation).从空间域,如果给我一个掩码大小N,我知道std-dev西格玛可以近似为sigma =(maskSize-1)/2/2.575,例如对于掩码大小N = 15我得到对于e ^ - (x²/2sigma²),std-dev = 2.71845,现在只考虑1D情况.
但是如何获得频域的sigma?
有趣的是顺便说一句,理论上我知道如何使用Mathematica获得sigma,但结果是纯粹的假,我可以在这里证明:
gauss1d[x_, sigma_] := Exp[-(x^2)/(2 sigma^2)]
Simplify[FourierTransform[gauss1d[x, sigma], x, omega], sigma > 0]
Run Code Online (Sandbox Code Playgroud)
结果是E ^( - (1/2)omega ^ 2 sigma ^ 2)*sigma
这是假的,因为它在E函数的指数中将1 /sigma²转换为sigma².因此,如果你画出这个,你就会发现标准偏差变小了很多,因为H(u,v) - 高斯很多"更薄".但是,它实际上应该在频域中比在空间域中宽得多!它没有任何意义......