我正在尝试获取图像的 fft,然后使用 matplotlib 绘制该 fft 的 fraq。然而,这个错误信息:
“ValueError:x 和 y 不能大于二维,但具有形状 (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()
错误消息如下:
回溯(最近一次调用最后一次):
文件“myfrouier.py”,第 21 行,位于
plt.semilogy(abs(fourier).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 号线,内
返回 func(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 中
"形状 {} 和 {}".format(x.shape, y.shape))
ValueError:x 和 y 不能大于二维,但具有形状 (2592,) 和 (2592, 1, 3)
您似乎没有必要的二维数组,而是具有附加第三维的数组。您必须选择要对该维度执行的操作:
-
如果只需要一个通道的信息,可以选择只保留第三维的第n个值:
n = 1
resim_data = resim_data[:, :, n]
-
计算第三维所有值的平均值
resim_data = resim_data.mean(axis=-1)
-
选择第三维所有值的最大值
resim_data = resim_data.max(axis=-1)
...
Example:
我将您的代码与 244x244 像素的示例图像一起使用,并得到了与您类似的错误:
ValueError:x 和 y 不能大于二维,但具有形状 (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
不再有三维空间了。之后就没有错误了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)