如何生成粉红噪声图像?

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 对应的 频率