Python 为什么我会得到颠倒的图像?

Python 为什么我会得到颠倒的图像?,python,numpy,Python,Numpy,我试图通过计算单个点积来实现ifft2,而不是矩阵的多重应用(我知道它在计算上非常密集)。与矩阵乘法ifft2相比,由单个点积实现构建的图像是颠倒的。在下面的代码中,rA是数据 使用矩阵乘法的代码: def DFT_matrix(N): i, j = np.meshgrid(np.arange(N), np.arange(N)) omega = np.exp( - 2 * np.pi * 1j / N ) W = np.power( omega, i * j )/N

我试图通过计算单个点积来实现ifft2,而不是矩阵的多重应用(我知道它在计算上非常密集)。与矩阵乘法ifft2相比,由单个点积实现构建的图像是颠倒的。在下面的代码中,rA是数据

使用矩阵乘法的代码:

def DFT_matrix(N):
    i, j = np.meshgrid(np.arange(N), np.arange(N))
    omega = np.exp( - 2 * np.pi * 1j / N )
    W = np.power( omega, i * j )/N
    return W
def forPyhton(v1,v2):
    weight=np.dot(v2,v1)
    return weight
    


rA=slice_kspace[5,:,:]
slice7=np.fft.ifft2(rA) 
slice7=np.fft.fftshift(slice7)

slices7Abs=np.abs(slice7)+1e-9

dftMtxM=np.conj(DFT_matrix(len(rA)))
dftMtxN=np.conj(DFT_matrix(len(rA[1])))

mA = dftMtxM @ rA @ dftMtxN
个别dot生产实施:

def DFT_matrix(N):
    i, j = np.meshgrid(np.arange(N), np.arange(N))
    omega = np.exp( - 2 * np.pi * 1j / N )
    W = np.power( omega, i * j )/N
    return W
def forPyhton(v1,v2):
    weight=np.dot(v2,v1)
    return weight
                
            
            
rA=slice_kspace[5,:,:]
slice7=np.fft.ifft2(rA) 
slice7=np.fft.fftshift(slice7)
slices7Abs=np.abs(slice7)+1e-9
dftMtxM=np.conj(DFT_matrix(len(rA)))
dftMtxN=np.conj(DFT_matrix(len(rA[1])))
#mA = dftMtxM @ rA @ dftMtxN
result=[]
for i in range(0,rA.shape[0]):
    row1=[]
    for j in range(0,dftMtxN.shape[1]):
        scaleWeight=forPyhton(rA[i,:],dftMtxN[:,j])


        row1.append(scaleWeight)

    result.append(row1)
result=np.asarray(result)
 
mA=[]
for i in range(0,dftMtxM.shape[0]):
    row2=[]
    for j in range(0,result.shape[1]):
        scaleWeight=forPyhton(dftMtxM[i,:],np.array(result[:,j]))

        row2.append(scaleWeight)
    mA.append(row2)
mm=np.amax(np.abs(mA))
mA=np.fft.fftshift(mA)
mAabs=np.abs(mA)+1e-9
切片7ABS mA的绘制由以下步骤完成:

plt.figure(3)
plt.imshow(slices7Abs,cmap='gray',origin='lower')
plt.figure(4)
plt.imshow(mAabs,cmap='gray',origin='lower')
plt.show()

图3和图4在方法1(即矩阵乘法)的情况下是相同的,但在第二种情况下,通过单独的点积实现,图像(即图4)是颠倒的。你知道为什么图像是颠倒的吗?

你能修复
循环的
缩进吗。我不想对哪些行属于循环,哪些不属于循环做出任何假设。我不确定您的问题是什么。我尝试使用
scipy.misc.ascent()
作为输入运行代码,所有方法都一致。您能提供您观察到的问题所在的
slice\u kspace
的数据吗?@mandulaj,谢谢您的评论。我可以尝试在周一上传这些图片,因为电脑现在不在我身边。for循环是否已更正?@mandulaj,如何在此处添加数据。for循环现在应该是正确的。@mandulaj有办法通过并行运行for循环来加快代码的速度。此外,我还观察到图像没有倒置,但如果我将图像旋转两次90度,就会得到所需的图像。