对于互相关例程,我想获取一些二维矩阵(灰度图像),将其中一半旋转 90 度,然后对它们进行傅里叶变换。我正在交叉关联大量帧,因此我尝试将 pyFFTW 与我过去成功使用的 FFTW 对象接口一起使用。
但是,在这里使用numpy.rot90()
我遇到的问题是 numpy 不是物理地旋转内存中的数组,而是简单地改变步幅,而 FFTW 需要实际旋转物理内存中的数组。
# Import a 2k x 2k image
mage = my_image_import_function( (2048,2048) )
# mage striding is (16384,8)
temp = np.rot90( mage, k=-1 )
# temp striding is (8, -16384 )
temp2 = np.copy( temp )
# temp2 striding is (8, 16384)
mage2 = np.lib.stride_tricks.as_strided( temp2, (2048,2048), (16384,8) )
# mage2 striding is (16384,8)
pyFFTWobj.update_arrays( mage2, mageFFT )
pyFFTWobj.execute()
使用.as_strided()
恢复原始步幅,以便可以将其输入 pyFFTW。但是,应用该.as_strided()
函数后,mage2
不再相对于 旋转mage
。.as_strided()
已经撤消了旋转操作,所以上面的代码什么也不做。
程序员如何在物理上强制一个 numpy 数组匹配它在内存中的步幅?