DEN*_* LI 6 python image fft transform
我想将一张图像的相位谱和不同图像的幅度谱组合成一张图像。
我已经得到了图像 A 和图像 B 的相位谱和幅度谱。
这是代码。
f = np.fft.fft2(grayA)
fshift1 = np.fft.fftshift(f)
phase_spectrumA = np.angle(fshift1)
magnitude_spectrumB = 20*np.log(np.abs(fshift1))
f2 = np.fft.fft2(grayB)
fshift2 = np.fft.fftshift(f2)
phase_spectrumB = np.angle(fshift2)
magnitude_spectrumB = 20*np.log(np.abs(fshift2))
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚,但我仍然不知道该怎么做。
下面是我的测试代码。
imgCombined = abs(f) * math.exp(1j*np.angle(f2))
Run Code Online (Sandbox Code Playgroud)
我希望我能像那样出来
为了让代码按预期工作,您需要修复以下几点:
math.exp函数支持标量求幂。对于逐元素矩阵求幂,您应该numpy.exp改用。*操作员会尝试执行矩阵乘法。在您的情况下,您想要执行元素乘法,这可以通过np.multiply通过这些修复,您应该得到如下频域组合矩阵:
combined = np.multiply(np.abs(f), np.exp(1j*np.angle(f2)))
Run Code Online (Sandbox Code Playgroud)
要获得相应的空间域图像,您需要使用以下方法计算逆变换(并取实部,因为由于数值误差,我有剩余的小虚部):
imgCombined = np.real(np.fft.ifft2(combined))
Run Code Online (Sandbox Code Playgroud)
最后,结果可以显示为:
import matplotlib.pyplot as plt
plt.imshow(imgCombined, cmap='gray')
Run Code Online (Sandbox Code Playgroud)
请注意,imgCombined可能包含超出[0,1]范围的值。然后,您需要决定如何重新调整值以适应预期[0,1]范围。
imgCombined = np.abs(imgCombined)| 归档时间: |
|
| 查看次数: |
4037 次 |
| 最近记录: |