2013-10-14 4 views
2

Я хотел бы создать 2D-изображение произвольного размера, содержащего случайно генерируемый розовый шум. Wikipedia suggests, что двумерное обобщение розового шума будет иметь энергию, которая падает как 1/f^2. Я нашел some code on the MATLAB File Exchange, который вычисляет 1D розовый вектор шума. Но я не знаю, как правильно обобщить его на два измерения - я не очень хорошо знаком с fft, и моя наивная попытка ниже создает сложные векторы при вычислении ifft.Создайте розовое изображение шума в Matlab

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-матрицу, содержащую розовый шум?

ответ

3

Во-первых, не всегда верьте тому, что говорит вам Википедия. Или, внимательно прочитайте, потому что определение розового шума не одно для одного для 2D. Во-вторых, вы можете использовать FEX file для генерации пространственного шума 1/f^beta с нормальным распределением ошибок. Подробнее читайте в документации к этому файлу.

+0

Спасибо за ссылку FEX. Оказывается, что броуновский шум, вычисленный этим файлом, может быть более полезным для меня, чем розовый шум. – nhowe

Смежные вопросы