当前位置: 首页 > 知识库问答 >
问题:

绘制图像的傅立叶变换时出现问题。ValueError:x和y不能大于2-D,但具有形状(2592,)和(2592,1,3)

谷梁智
2023-03-14

我试图得到一幅图像的fft,然后用matplotlib绘制该fft的fraq。但是,此错误消息:

"ValueError:x和y不能大于2-D,但具有形状(2592,)和(2592, 1, 3)"。

我试图重塑我的np。这样排列:

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()

错误消息BLELOW:

回溯(最近一次调用):

文件“myfrouier.py”,第21行,in

plt符号学(abs(fourier).astype(np.uint8))文件

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

第2878行,在半部曲中返回gca()。半部曲(*args,**kwargs)
File"/home/aybarsyildiz/. local/lib/python3.6/site-pack/matplotlib/axes/_axes.py",第1844行,在半部曲l=self.plot(*args,**kwargs)File"/home/aybarsyildiz/. local/lib/python3.6/site-pack/matplotlib/init.py"中,第1810行,在内部返回func(ax,*args,**kwargs)中
File"/home/aybarsyildiz/. local/lib/python3.6/site-pack/matplotlib/axes/_",第1611行,在自身行的绘图中。_get_lines(*args,**kwargs):
File"/home/aybarsyildiz/. locallib/python3.6/site-pack/matplotlib/axes/_base.py",第370行,在_plot_argsx中,y=自己。_xy_from_xy(x, y)File"/home/aybarsyildiz/. local/lib/python3.6/site-pack/matplotlib/axes/_base.py",第234行,在_xy_from_xy"形状{}和{}"。格式(x.shape,y.shape))值错误:x和y不能大于2-D,但有形状(2592,)和(2592, 1, 3)

共有1个答案

杨乐
2023-03-14

你似乎没有必要的2d数组,但有一个额外的三维数组。您必须选择要对该维度执行的操作:

>

  • 如果只需要一个通道的信息,可以选择只保留第n维的值:

    n = 1
    resim_data = resim_data[:, :, n]
    

    计算第三维所有值的平均值

    resim_data = resim_data.mean(axis=-1)
    

    为第三维的所有值选择最大值

    resim_data = resim_data.max(axis=-1)
    

    ...

    示例:

    我将您的代码用于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不再有第三维度。之后没有错误。

  •  类似资料:
    • 目标 在这一节中,我们将学习 使用OpenCV查找图像的傅立叶变换 利用Numpy中的FFT功能 傅立叶变换的一些应用 我们将学到以下函数:cv2.dft(),cv2.idft()等 理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像,可以使用2D离散傅里叶变换(DFT)来查找频域。被称为快速傅立叶变换(FFT)的快速算法被用于DFT的计算。有关这些的细节可以在任何图像处理或信号处理的教科书中

    • 本文向大家介绍Opencv实现傅里叶变换,包括了Opencv实现傅里叶变换的使用技巧和注意事项,需要的朋友参考一下 傅里叶变换将图像分解成其正弦和余弦分量,它将图像由空域转换为时域。任何函数都可以近似的表示为无数正弦和余弦函数的和,傅里叶变换就是实现这一步的,数学上一个二维图像的傅里叶变换为:   公式中,f是图像在空域的值,F是频域的值。转换的结果是复数,但是不可能通过一个真实图像和一个复杂的图

    • 目标 在本节中,我们将学习 使用OpenCV查找图像的傅立叶变换 利用Numpy中可用的FFT函数 傅立叶变换的某些应用程序 我们将看到以下函数:cv.dft(),cv.idft()等 理论 傅立叶变换用于分析各种滤波器的频率特性。对于图像,使用2D离散傅里叶变换(DFT)查找频域。一种称为快速傅立叶变换(FFT)的快速算法用于DFT的计算。关于这些的详细信息可以在任何图像处理或信号处理教科书中找

    • 我试图画一系列给定坐标的矩形,这只是一个x和y值的列表。 这是我的密码: 此代码应绘制类似以下内容的形状: 相反,它画的东西没有连贯的形状。

    • 我目前正在使用libgdx为我的Android游戏开发一个对话框窗口。此对话框窗口包含标签和按钮的集合,但也应该包含图像。该图像表示“剩余健康指示器”,即带有指示玩家健康的符号的空指示器。这个指示器必须用代表剩余健康量的彩色矩形填充(见下面的屏幕截图)。 为了在libgdx的对话框中呈现这一点,我必须绘制一个图像和一个彩色矩形(红色矩形表示剩余健康的实际数量)。我知道对话框支持图像的渲染,但我不知

    • 我有一个8000 Hz采样率的单通道波。 我需要实时分析5赫兹到300赫兹之间的频率,重点是10到60赫兹的信号。 我最初的想法是将8000 Hz的样本放入缓冲区,收集大约32000个样本。然后,在其上运行32000窗口大小的傅立叶变换。 这里的理由是,对于低频信号,您需要更大的窗口大小(对吗?) 然而,如果我试图实时显示这个信号,那么AudioAnalyzerNode似乎不是一个好的选择。我知道