在Matlab中创建粉红噪声图像

时间:2013-10-14 19:09:55

标签: image matlab fft noise

我想要生成包含随机生成的粉红噪声的任意大小的2D图像。 Wikipedia suggests粉红噪声的二维泛化将使能量下降为1 / f ^ 2。我发现some code on the MATLAB File Exchange计算一维粉红噪声向量。但是我不知道如何将它正确地推广到两个维度 - 我对fft不是很熟悉,而且当我计算ifft时,我下面的天真尝试会产生复杂的向量。

function pink = pinkNoiseImage(nrow,ncol)

rnrow = 2.^(ceil(log2(nrow)));
rncol = 2.^(ceil(log2(ncol)));
r = randn(rnrow,rncol);
rf = fft(r);
rnup = rnrow/2+1;
cnup = rncol/2+1;
frf = kron(1./sqrt(1:cnup),1./sqrt(1:rnup)');

rf(1:rnup,1:cnup) = rf(1:rnup,1:cnup).*frf;
rf(rnup+1:rnrow,1:cnup) = real(frf(rnrow/2:-1:2,1:cnup))-1i*imag(frf(rnrow/2:-1:2,1:cnup));
rf(1:rnup,cnup+1:rncol) = real(frf(1:rnup,rncol/2:-1:2))-1i*imag(frf(1:rnup,rncol/2:-1:2));
rf(rnup+1:rnrow,cnup+1:rncol) = real(frf(rnrow/2:-1:2,rncol/2:-1:2))-1i*imag(frf(rnrow/2:-1:2,rncol/2:-1:2));

pink = ifft(rf);

如何生成包含粉红噪声的2D矩阵?

1 个答案:

答案 0 :(得分:3)

首先,不要总是相信维基百科告诉你的内容。或者,仔细阅读,因为粉红噪声的定义不是2D的一对一。 其次,您可以使用以下FEX file生成1/f^beta空间噪音,并具有正常的错误分布。请阅读该文件的文档。