python – 相移后进行傅立叶变换
发布时间:2020-12-20 11:45:30 所属栏目:Python 来源:网络整理
导读:我试图改变图像的相位并对其进行傅立叶变换.但是这种相位变化会导致沿x和y轴的功率泄漏. 假设我的图像是全部矩阵.如果我采用傅里叶变换,我得到 .看到所有的力量都在中心.事实上,除非你放大,否则我们看不到它. 现在假设我将矩阵乘以复数正弦曲线.理想情况下,
我试图改变图像的相位并对其进行傅立叶变换.但是这种相位变化会导致沿x和y轴的功率泄漏.
假设我的图像是全部矩阵.如果我采用傅里叶变换,我得到 现在假设我将矩阵乘以复数正弦曲线.理想情况下,功率应该转移到正弦波的频率.但这就是我得到的 为什么会这样?是因为信号的非连续性吗? 请参阅下面的python代码 import numpy as np from matplotlib import pyplot as plt # Init a all one array base_image = np.ones([1024,1024]) #Generate a array so that we can make a sinusoid using it x_cords = np.arange(base_image.shape[1]) - base_image.shape[1]/2 x_cords = np.transpose(x_cords)/512 x_cords = x_cords.astype(float) x_cords = np.tile(x_cords,[base_image.shape[0],1]) y_cords = np.transpose(x_cords) #Generate the sinusoid phase = np.exp(x_cords + y_cords) #Apply this shift new_image = base_image * phase spec_base = np.fft.fftshift(np.fft.fft2(base_image)) spec_new = np.fft.fftshift(np.fft.fft2(new_image)) plt.imshow(np.log(np.abs(spec_base))) plt.show() plt.imshow(np.log(np.abs(spec_new))) plt.show() 提前感谢您的任何答案 解决方法
如果你绘制你的new_image,你会发现它不是正弦曲线:
这是一种在不使用复数的情况下创建正弦曲线模式的强力方法: # create a sinusoid F=4 ## select the frequency -- use an even integer to minimize spectral "leakage" new_image = np.ones([X,Y]) for y in xrange(Y): for x in xrange(X): new_image[y][x] = sin(x/float(X)*pi*F)*sin(y/float(Y)*pi*F) 功率谱具有最小的泄漏,如果放大,您可以看到峰值功率是非原点的,并且由于DC周围的镜像实际上存在4个峰值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |