Изображение в оттенках серого для массива NumPy для преобразования Фурье

В настоящее время я использую PIL и NumPy. У меня есть цветное изображение png , и я хочу:

  1. Прочитайте его в оттенках серого
  2. Преобразование в массив NumPy
  3. Выполнение БПФ в массиве
  4. Отобразить изображение

Это то, что я пытаюсь (в IPython w/ - pylab ):

In [1]: import Image

In [2]: img = Image.open('ping.png').convert('LA')

In [3]: img_as_np = np.asarray(img)

In [4]: img_as_np
Out[4]: array(, dtype=object)

In [5]: img_fft = fft.fft2(img_as_np)//IndexError: index out of range for array
5
nl ja de
Я где-то читал, что режим LA позволит мне использовать imshow() в оттенках серого, теперь я понимаю, что L помещает его в оттенки серого, но я просто необходимо добавить аргумент в imshow() , чтобы убедиться, что он отображается правильно как оттенки серого. Я узнал (из ответов ниже) A предотвращает правильное преобразование. Моя ошибка :-) Спасибо!
добавлено автор adelbertc, источник
Любая причина использования режима LA (оттенки серого с альфой)?
добавлено автор mmgp, источник
После того, как вы передумаете, ответ на stackoverflow.com/a/14472089/1832154 показывает, как правильно отображать результат Преобразование Фурье.
добавлено автор mmgp, источник

3 ответы

Похоже, вы используете версию PIL до версии 1.1.6, где они ввели чтобы numpy знал, что делать с Image . Таким образом, вы просто получаете img_as_np как одноэлементный массив, содержащий объект Image (который показывает, что показывает Out [4] )) ,

Вместо этого вам нужно сделать что-то вроде np.asarray (img.getdata ()) , которое даст вам массив <число> число_пикселей x num_channels целых чисел от 0 до 255 (по крайней мере для png я пытался). Вы можете захотеть сделать

img_as_np = np.asarray(img.getdata()).reshape(img.size[1], img.size[0], -1)

выложить его как изображение (транспонированное). Вы также можете разделить на 255, чтобы получить значения с плавающей запятой между 0 и 1, если это формат, который вы ожидаете (как например, код matplotlib imshow ).

4
добавлено

Вы хотите использовать режим «L» вместо «LA» в качестве параметра метода convert (). «LA» оставляет альфа-канал, а затем numpy.asarray не работает так, как вы планировали. Если вам нужен альфа-канал, вам понадобится другой метод для преобразования в массив numpy. В противном случае используйте режим «L».

4
добавлено

Используя это для изображения:

>>> from PIL import Image
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> Image.__version__
'1.1.7'
>>> img = Image.open('lena.png').convert('L')
>>> data = np.asarray(img.getdata()).reshape(img.size)
>>> fft = np.fft.fft2(data)
>>> fft[0, 0] = 0 # remove DC component for visualization
>>> plt.imshow(np.abs(np.fft.fftshift(fft)), interpolation='nearest')

>>> plt.show()
>>> plt.imshow(np.abs(np.fft.fftshift(fft))[224:288, 224:288], interpolation='nearest')

>>> plt.show()

enter image description here

1
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community