Вы можете использовать библиотеку 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')