【问题标题】:translation in fourier space傅立叶空间平移
【发布时间】:2017-03-25 10:11:36
【问题描述】:

我正在尝试为简单的正弦波图像制作动画。从逻辑上讲,这可以通过傅立叶空间图像来实现,该图像具有恰好 1 个实部(像素)的功率,并逐渐改变像素的相应虚部(相位值)。下面的代码会产生一个水平光栅,它会逐渐向下移动。然而,这种转变是缓慢的,一旦相位超过某个值,图像就不再具有动画效果。相位分量的单位和范围是什么?我在这里错过了什么?

import numpy as np, matplotlib as mpimg

f = (np.zeros([33, 33]) + 0j) # blank Fourier image
f[14, 16] = (1 + 0j) # a single component with power

steps = range(16) # number of images to produce
for i in range(len(steps)):
    c = np.fft.ifft2(np.fft.ifftshift(f, axes=[0, 1])) # grating image (cartesian)
    mpimg.imsave('grating %02i.png' % i, c, cmap='gray') # save image
    f[14, 16] += complex(0, 1/16.0) # increment phase

【问题讨论】:

    标签: python numpy fft


    【解决方案1】:

    相位分量不仅仅是虚构的分量。相位分量是 atan2(Im, Re)。要线性移动图像,您的增量可能应该将此阶段修改 2*pi/nsteps。这意味着它必须同时修改实部和虚部。

    【讨论】:

    • 就是这样!但说得更清楚些,首先用atan2(Im, Re)计算实部和虚部之间形成的角度。然后将结果角度增加一些步长值。最后,将原来的傅立叶分量替换为complex(cos(new_angle), sin(new_angle)
    猜你喜欢
    • 2011-04-16
    • 2016-03-25
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多