擅长:python、mysql、java
<p>我在这里添加另一个答案,适合添加的代码。在</p>
<p>答案仍然是<code>np.fft.fft2()</code>。这里有一个例子。我稍微修改了代码。为了验证我们是否需要<code>fft2</code>我丢弃了其中一个斑点,然后我们知道单个高斯斑点应该转换为高斯斑点(具有特定相位,在绘制绝对值时不会显示)。我还减小了标准差,这样频率响应会变宽一点。在</p>
<p>代码:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
x, y = np.meshgrid(np.linspace(-1,1,100), np.linspace(-1,1,100))
d = np.sqrt(x**2+y**2)
sigma, mu = .1, 0.0
g1 = np.exp(-( (d-mu)**2 / ( 2.0 * sigma**2 ) ) )
N = 300
positions = [ [150,100] ]#, [150,200] ]
sz2 = [int(x/2) for x in g1.shape]
F_2D = np.zeros([N,N])
for x0,y0 in positions:
F_2D[ x0-sz2[0]: x0+sz2[0], y0-sz2[1]:y0+sz2[1] ] = g1 + 1j*0.
result = np.fft.fftshift(np.fft.fft2(F_2D))
plt.subplot(211); plt.imshow(F_2D)
plt.subplot(212); plt.imshow(np.absolute(result))
plt.title('$\sigma$=.1')
plt.show()
</code></pre>
<p>结果:</p>
<p><a href="https://i.stack.imgur.com/fXPzm.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/fXPzm.png" alt="Example result 1"/></a></p>
<p>为了回到原来的问题,我们只需要改变</p>
<p><code>positions = [ [150,100] , [150,200] ]</code>
和<code>sigma=.35</code>而不是<code>sigma=.1</code>。在</p>