numpy.fft.rfftn后的全频率阵列重建



我有一个真实值的灰度3D图像,分辨率行x色x深。我用freq = numpy.fft.rfftn(myImage)

取图像的dft

返回的数组freq是分辨率:行数x颜色x深度/2 + 1。我想重建freq,就像它是numpy.fft.fftn(myImage)的输出一样,也就是说,我想让freq的维度是行x colx depth。

我知道实值dft的对应关系是X_(k1,k2,k3) = X*_(N1-k1,N2-k2,N3-k3)其中*是共轭转置

我可以使用循环重建完整的频率阵列,但这太慢了,但我很难找出正确的方法来做它与数组切片。

谢谢!

仅供参考,我需要完整的数组,因为我将元素明智地将它与另一个全尺寸行x cols x depth的数组相乘,我不能假设数组有任何结构(如对称),这将使我没有必要重建完整的频率数组。

我明白了!

import numpy as np
import time
rows = 181
cols = 217
deps = 181
jac_k = np.random.rand(rows, cols, deps)*5
prev = time.time()
fft1 = np.fft.fftn(jac_k)
print time.time() - prev
prev = time.time()
fft2 = np.fft.rfftn(jac_k)
if deps%2 == 0:
    fft2Star = np.conj(fft2[:, :, -2:0:-1])
else:
    fft2Star = np.conj(fft2[:, :, -1:0:-1])
fft2Star[1::, :, :] = fft2Star[:0:-1, :, :]
fft2Star[:, 1::, :] = fft2Star[:, :0:-1, :]
fft2 = np.concatenate( (fft2, fft2Star), axis=2)
print time.time() - prev
print np.linalg.norm(fft1 - fft2)

最新更新