如何生成2D彩色噪波



我尝试生成粉红色噪声的2D阵列失败。有人能给我解释一下怎么做吗?否则,是否有允许生成2D(或更高维度(彩色噪声(1/f噪声(的python库?

这里和相关问题(如何生成粉红色噪声图像?(中给出的答案为您提供了大部分信息,但我想我应该制定一个完整的步骤来展示一切是如何结合在一起的。

尤其是当人们在理解";频率矩阵";。

将白噪声转换为粉红噪声

  1. 生成一些白噪声:whitenoise = np.random.uniform(0, 1, (256, 256))
  2. 傅立叶变换并将低频移到中心(这使得生成"频率矩阵"更直观(:ft_arr = np.fft.fftshift(np.fft.fft2(whitenoise))
  3. 生成";频率矩阵";。在1-D的情况下,这将是与变换给出的幅度相对应的实际频率的阵列。在2-D的情况下,这是离偏移傅立叶空间的中心的距离,离边缘越远,在该点捕获的频率就越大。这可以通过np.meshgridnp.hypot生成:

    _x, _y = np.mgrid[0:ft_arr.shape[0], 0:ft_arr.shape[1]]
    f = np.hypot(_x - ft_arr.shape[0] / 2, _y - ft_arr.shape[1] / 2)

    然后我们将傅立叶空间除以频率
    pink_ft_arr = ft_arr / f
  4. 去除由于具有零频率分量而出现的奇点。(也许有一种更聪明的方法可以做到这一点,但无论如何,这都给了我预期的输出(:

    pink_ft_arr = np.nan_to_num(pink_ft_arr, nan=0, posinf=0, neginf=0)
  5. 将傅立叶空间粉红色噪声转换回图像空间:
    pinknoise = np.fft.ifft2(np.fft.ifftshift(pink_ft_arr)).real

然后可以使用matplotlibsplt.imshow绘制,或者将其缩放到某个合理的范围内,并将其写为图像。

白色噪声,来自np.random.uniform
以上产生的粉红色噪声。

  1. 在2D中生成白噪声,例如使用np.random.randn

  2. 计算它(numpy.fft.fft2(的FFT_2D

  3. 将结果(2D频谱(乘以1/f**2矩阵,以如下方式计算:1/f_along_x * 1/f_along_y。这就是我如何解释N维中粉红色噪声的定义,但我不确定我是正确的!编辑:Cris Luengo版本(请参阅下面的评论(-1/sqrt(f_x**2+f_y**2)-对我来说似乎更好,但由您决定使用哪种2d粉红色噪声的定义。

  4. 使用IFFT_2D获得粉红噪声图像(numpy.fft.ifft2(

相关内容

  • 没有找到相关文章

最新更新