python – 相移后进行傅立叶变换

python – 相移后进行傅立叶变换,第1张

概述我试图改变图像的相位并对其进行傅立叶变换.但是这种相位变化会导致沿x和y轴的功率泄漏. 假设我的图像是全部矩阵.如果我采用傅里叶变换,我得到.看到所有的力量都在中心.事实上,除非你放大,否则我们看不到它. 现在假设我将矩阵乘以复数正弦曲线.理想情况下,功率应该转移到正弦波的频率.但这就是我得到的 .注意沿x和y轴泄漏的功率. 为什么会这样?是因为信号的非连续性吗? 请参阅下面的python代码 i 我试图改变图像的相位并对其进行傅立叶变换.但是这种相位变化会导致沿x和y轴的功率泄漏.

假设我的图像是全部矩阵.如果我采用傅里叶变换,我得到

.看到所有的力量都在中心.事实上,除非你放大,否则我们看不到它.

现在假设我将矩阵乘以复数正弦曲线.理想情况下,功率应该转移到正弦波的频率.但这就是我得到的

.注意沿x和y轴泄漏的功率.

为什么会这样?是因为信号的非连续性吗?

请参阅下面的python代码

import numpy as npfrom matplotlib import pyplot as plt# Init a all one arraybase_image = np.ones([1024,1024])#Generate a array so that we can make a sinusoID using itx_cords = np.arange(base_image.shape[1]) - base_image.shape[1]/2x_cords = np.transpose(x_cords)/512x_cords = x_cords.astype(float)x_cords = np.tile(x_cords,[base_image.shape[0],1])y_cords = np.transpose(x_cords)#Generate the sinusoIDphase = np.exp(x_cords + y_cords)#Apply this shiftnew_image = base_image * phasespec_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 sinusoIDF=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个峰值.

总结

以上是内存溢出为你收集整理的python – 相移后进行傅立叶变换全部内容,希望文章能够帮你解决python – 相移后进行傅立叶变换所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193461.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存