2013-03-21 3 views
1

Я пытаюсь взять fft изображения в python, изменить преобразованное изображение и взять обратный fft. В частности, у меня есть изображение сетки, которую я хотел бы преобразовать, а затем вычеркнуть все, кроме центральной, узкой вертикальной щели преобразования, а затем взять обратный fft.Код Python для базового fft изображения сетки

Код я работаю сейчас, отсутствие изменений для преобразования плоскости:

import os 
os.chdir('/Users/terra/Desktop') 
import Image, numpy 
i = Image.open('grid.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('grid2.png') 

В настоящее время, я получаю сообщение об ошибке:

Traceback (самый последний вызов в прошлом) : Файл «/Users/terra/Documents/pic2.py», строка 11, в j.save ('grid2.png') Файл «/Library/Frameworks/Python.framework/Versions/2.7/lib/python2 .7/site-packages/PIL/Image.py ", строка 1439, в сохранении save_handler (self, fp, filename) Файл"/Libr ary/Frameworks/Python.framework/Версии/2.7/lib/python2.7/site-packages/PIL/PngImagePlugin.py ", строка 506, в _save повысить IOError," невозможно записать режим% s как PNG "% mode IOError: не может писать режим F как PNG

Я очень новичок в программировании и преобразованиях Фурье, поэтому большинство связанных потоков, которые я нашел онлайн, над моей головой. Очень ценная помощь. Благодаря!

+1

В Python 2.5 Я не получаю такого сообщения об ошибке для этого кода. – Bemmu

+0

Стилистичный, но я рекомендую не использовать имена переменных 'i' и' j' для чего угодно, кроме целочисленных индексирующих переменных, например, для прохождения диапазона или цикла. – Patashu

+1

Не могли бы вы скопировать и вставить свой код в консоль, а затем отредактировать свой вопрос, чтобы включить всю полученную трассировку? (Единственный способ, с помощью которого я могу думать о том, чтобы вызвать это сообщение об ошибке, было бы, если бы код был действительно «a = numpy.asarray (« i ») или что-то еще, но я не уверен, какая строка является четвертой.) – DSM

ответ

1

Основная проблема заключается в том, что массив содержит поплавки после FFT, но для того, чтобы он был полезен для вывода PNG, вам необходимо иметь uint8.

Самое простое, чтобы преобразовать его в uint8 непосредственно:

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

Это, вероятно, не будет производить изображение, которое вы хотите, так что вы будете иметь, чтобы нормализовать значения в массиве как-то перед преобразованием их в целые числа ,

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