Why do I get upside-down image?

Viewed 119

I am trying to implement ifft2 by computing the individual dot product instead of matrix mutliplication ( I understand it is computationlly extremely intensive). The image constructed from the individual dot product implementation is upside-down compare to the matrix multiplication-wise ifft2. In the code below rA is the data.

Code with matrix multiplication:

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

Individual dot producewise implementation:

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

The plotting of slices7Abs mA is done by

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

The figure 3 and figure 4 is same in case of method 1 i.e. for matrixwise multiplication but for the second case, with individual dot productwise implementation the image i.e figure 4 is upside-down. Any idea why the image is upside down?

0 Answers
Related