如何生成粉红噪声图像?
How to generate a pink noise image?
我正在尝试复制 P. Bourke 在 Python 中的 "Frequency Synthesis of Landscapes"。我以为这会很简单
import numpy as np
from scipy.fft import fft2, ifft2
whitenoise = np.random.uniform(0,1,(256,256,3))
fouriertransformed = np.fft.fftshift(fft2(whitenoise))
pinktransformed = np.reciprocal(fouriertransformed)
pinknoise = ifft2(np.fft.ifftshift(pinktransformed)).real
但它似乎要复杂得多。我怎样才能做到这一点,我怎样才能检查结果图像中的功率是否真的下降了 1/f**2?
这里的问题是,通过计算 pinktransformed = np.reciprocal(fouriertransformed)
你可以计算出 振幅 的倒数,但你真正想要的是 缩放 [=21] =] 这些幅度 1/f**2
,所以你必须用
替换那条线
pinktransformed = fouriertransformed / f**2
其中 f
是一个数组,其中包含与傅里叶变换的每个 bin 对应的 频率 。
我正在尝试复制 P. Bourke 在 Python 中的 "Frequency Synthesis of Landscapes"。我以为这会很简单
import numpy as np
from scipy.fft import fft2, ifft2
whitenoise = np.random.uniform(0,1,(256,256,3))
fouriertransformed = np.fft.fftshift(fft2(whitenoise))
pinktransformed = np.reciprocal(fouriertransformed)
pinknoise = ifft2(np.fft.ifftshift(pinktransformed)).real
但它似乎要复杂得多。我怎样才能做到这一点,我怎样才能检查结果图像中的功率是否真的下降了 1/f**2?
这里的问题是,通过计算 pinktransformed = np.reciprocal(fouriertransformed)
你可以计算出 振幅 的倒数,但你真正想要的是 缩放 [=21] =] 这些幅度 1/f**2
,所以你必须用
pinktransformed = fouriertransformed / f**2
其中 f
是一个数组,其中包含与傅里叶变换的每个 bin 对应的 频率 。