math - 为空间域中的给定掩码在频域中找到等效的高斯滤波器掩码

标签 math fft blur frequency gaussian

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

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

我遇到的麻烦是找到将导致相应 H(u,v) 的确切公式(即找到 sigma,标准偏差)。从空间域中,如果给我一个掩码大小 N,我知道 std-dev sigma 可以近似为 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]

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

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

最佳答案

一个高斯的傅里叶变换是一个高斯,你可以从

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

但请注意,std.开发。确实反转了!!!!

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

频率 = 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。域几乎完全去除了所有频率(只保留了非常低的频率)。

关于math - 为空间域中的给定掩码在频域中找到等效的高斯滤波器掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4759194/

相关文章:

java - 浮点运算 = 从 Dec 到 Binary 的最差精度/差异是多少?

c# - 在特定条件下使用 LINQ 从列表中获取数字

math - 计算进度条的百分比填充

image - 什么是 "do-nothing"卷积核

matlab - 帮助我理解 FFT 函数(Matlab)

jquery - 使用 JQuery 检测容器和子元素何时失去焦点

ruby - 条件下所有可能的排列

java - matlab 和 java 中的 fft

javascript - setTimeout 仅在导致它的事件的第一次不工作

css - 使用 CSS3 模糊滤镜时图像周围出现白色模糊?