Проблема построения изображения преобразования Фурье изображения.«ValueError: x и y могут быть не больше 2-D, но иметь формы (2592,) и (2592, 1, 3)» - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь получить fft изображения, а затем построить график этого fft с помощью matplotlib.Тем не менее это сообщение об ошибке:

"Ошибка ValueE: x и y могут быть не более 2-D, но имеют формы (2592,) и (2592, 1, 3)".

Я пытался изменить форму моего np.array следующим образом:

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import tkinter
from scipy.fftpack import fft, fft2, fftshift

resim = Image.open(r'yeni.jpg')

resim_data = np.asarray(resim)

fourier = fft2(resim_data)

#psd2D = np.abs(fourier)**2


plt.figure()
plt.semilogy(abs(fourier).astype(np.uint8))
plt.title('fourier transform fraq')
plt.show()

Сообщение об ошибке ниже:

Traceback (самый последний вызовпоследнее):

Файл "myfrouier.py", строка 21, в

plt.semilogy (abs (Фурье) .astype (np.uint8)) Файл

"/home/aybarsyildiz/.local/lib/python3.6/site-packages/matplotlib/pyplot.py",

строка 2878, в полулогии возвращает gca (). semilogy (* args, ** kwargs)
Файл "/home/aybarsyildiz/.local/lib/python3.6/site-packages/matplotlib/axes/_axes.py", строка 1844, в полулогии l = self.plot (* args, ** kwargs)Файл "/home/aybarsyildiz/.local/lib/python3.6/site-packages/matplotlib/init.py", строка 1810, во внутренней функции возврата (ax, * args, ** kwargs)
Файл "/home/aybarsyildiz/.local/lib/python3.6/site-packages/matplotlib/axes/_axes.py", строка 1611, в сюжете для строки в self._get_lines (* args, ** kwargs):
Файл "/home/aybarsyildiz/.local/lib/python3.6/site-packages/matplotlib/axes/_base.py", строка 393, в _grab_next_args, получается из selfФайл ._plot_args (this, kwargs) "/home/aybarsyildiz/.local/lib/python3.6/site-packages/matplotlib/axes/_base.py", строка 370, в _plot_args x, y = self._xy_from_xy (x, y) Файл "/home/aybarsyildiz/.local/lib/python3.6/site-packages/matplotlib/axes/_base.py", строка 234, в формате _xy_from_xy "shape {} и {}". x (x.shape, y.shape)) ValueError: x и y могут быть не больше 2-D, но иметь формы (2592,) и (2592, 1, 3)

1 Ответ

0 голосов
/ 27 декабря 2018

У вас, кажется, нет необходимого 2d-массива, но есть массив с дополнительным третьим измерением.Вы должны выбрать, что вы хотите сделать с этим измерением:

  • Если вам нужна информация только об одном канале, вы можете оставить только n-е значения третьего измерения:

    n = 1
    resim_data = resim_data[:, :, n]
    
  • Рассчитать среднее для всех значений третьего измерения

    resim_data = resim_data.mean(axis=-1)
    
  • Выбрать максимальное значение для всех значенийтретье измерение

    resim_data = resim_data.max(axis=-1)
    
  • ...


Пример:

Iиспользовал ваш код с примером изображения с 244x244 пикселями и получил ошибку, аналогичную вашей:

ValueError: x и y могут быть не больше 2-D, но имеют формы (244,) и (244, 244, 4)

Меня интересовал только первый канал, поэтому я отбросил все остальные ненужные значения из третьего измерения:

resim_data = np.asarray(resim)
print(resim_data.shape)
n = 0
resim_data = resim_data[:, :, n]
print(resim_data.shape)

Что печатает:

(244, 244, 4)
(244, 244)

Как видите, resim_data больше не имеет третьего измерения.После этого ошибок нет.

...