FFT и преобразование массива в изображение / изображение в массив - PullRequest
3 голосов
/ 16 апреля 2010

Я хочу сделать фурье-преобразование изображения.Но как я могу изменить изображение в массив?И после этого я думаю, что я должен использовать numpy.fft.rfft2 для преобразования.А как перейти обратно из массива в изображение?Заранее спасибо.

1 Ответ

12 голосов
/ 16 апреля 2010

Вы можете использовать библиотеку PIL для загрузки / сохранения изображений и преобразования в / из массивов numpy.

import Image, numpy
i = Image.open('img.png')
i = i.convert('L')    #convert to grayscale
a = numpy.asarray(i) # a is readonly

b = abs(numpy.fft.rfft2(a))

j = Image.fromarray(b)
j.save('img2.png')

Я использовал abs выше, потому что результат БПФ имеет сложные значения, поэтому нет смысла преобразовывать его непосредственно в изображение. Преобразование в оттенки серого выполняется таким образом, чтобы БПФ выполнялось только для одного канала - вместо этого можно выбрать другой способ выбора канала или передать правильный параметр axes в rfft2, а затем извлечь нужный канал. 1009 *

Edit:

Чтобы также выполнить обратное БПФ и вернуть исходное изображение, у меня работает следующее:

import Image, numpy
i = Image.open('img.png')
i = i.convert('L')    #convert to grayscale
a = numpy.asarray(i)

b = numpy.fft.rfft2(a)
c = numpy.fft.irfft2(b)

j = Image.fromarray(c.astype(numpy.uint8))
j.save('img2.png')
...