3

到目前为止,我已经完全在空间域中实现了一个高斯模糊过滤器,利用高斯的可分离性,即沿图像的行和列应用一维高斯核。那工作得很好。

现在,仅给定空间域的 NxN 卷积矩阵的大小 N,我想在频域上实现完全相同的模糊图像。这意味着我会将图像加载到矩阵中(numpy,我正在使用 python),对其应用 FFT(然后我有 G(x,y)),然后我还必须有一个过滤器 H( u,v) 在频域中也类似于一些 2d 高斯的形状,其中心值为 1.0,然后随着离中心 I 越远,值下降到 0。然后我在频域中进行乘法(在我必须考虑对 H 进行中心偏移之前),然后应用 iFFT。

我遇到的麻烦是找到将导致相应H(u,v)的确切公式(即找到sigma,std-deviation)。从空间域中,如果给我一个掩码大小 N,我知道 std-dev sigma 可以近似为 sigma=(maskSize-1)/2/2.575,例如对于掩码大小 N=15,我得到对于 e^-(x²/2sigma²),std-dev=2.71845,现在只考虑一维情况。

但是如何获得频域的 sigma?

有趣的是,理论上我知道如何使用 Mathematica 获得 sigma,但结果是纯粹的假的,正如我可以在这里演示的那样:

gauss1d[x_, sigma_] := Exp[-(x^2)/(2 sigma^2)]
Simplify[FourierTransform[gauss1d[x, sigma], x, omega], sigma > 0]

结果是 E^(-(1/2) omega^2 sigma^2) * sigma

这是假的,因为它在 E 函数的指数中将 1/sigma² 变成了 sigma²。因此,如果你画这个,你会看到标准偏差变得更小了,因为 H(u,v)-gaussian 更“薄”了。但是,它实际上在频域中应该比在空间域中宽得多!!这没有任何意义...

4

1 回答 1

8

高斯的傅里叶变换是高斯的,如您所见

http://en.wikipedia.org/wiki/Fourier_transform

但请注意,标准。开发。确实反转!!!!

你说那是假的,但事实并非如此。从某种意义上说,频域是时域的倒置。

频率 = 1/次

给出的标准偏差是及时的,当你转换它时它仍然是及时的(常数不会被转换)。

假设您在时间方面使用一些 s 找到了高斯的时间版本。您将数据转换为频率空间。您可以使用 that s,它的行为将完全按照预期的方式运行。例如,如果你有一个小的 s 那么它会导致 freq 标准。开发。在频率版本要大。

同样,这是因为频率是时间的倒置(再次,在某种意义上)。

假设你的高斯有非常小的标准。开发。然后它逼近一个狄拉克δ函数。我们知道这一点是因为在频率域中被转换为正弦曲线。即,跨越整个频域的东西。(即,具有无限的标准偏差。(如果它是高斯的)。

可以这样想:您想要在频域中进行平滑处理。平滑什么?高频成分,对吧?通过与高斯卷积,您可以在数据附近进行平滑处理。如果标准。开发。很小,你保持更高的频率。在频域中,这意味着您要保持更多频率。但是conv是频域的乘法。如果我们在频域中乘以薄高斯,我们将得到一小组频率。

G(t)*f(t) G[w]*f[w]

第一个,卷积。对于平滑滤波器,我们希望 G(t) “大”(标准偏差大)。这意味着我们需要更少的高频分量(一种低通滤波器)。在频率。我们乘以 G[w] 的域。这意味着 G[w] 必须很薄(并且以原点为中心),以便我们阻挡高点。

我认为基本上你没有意识到在时域中我们有一个卷积,而在频域中它是一个乘法。G 在两者中不能相同。如果 G 在时域中很细而在频域中很细,它们将不会产生相同的效果。卷积中的 G Thin 几乎没有效果,但频率中的 G Thin。域几乎完全消除了所有频率(只保留了非常低的频率)。

于 2011-01-22T06:27:19.080 回答