原理介绍
该代码的用途及其他信息可参考 Matlab psf2otf与fft2函数的关系
代码展示
def psf2otf(psf, outSize):
psfSize = np.array(psf.shape)
outSize = np.array(outSize)
padSize = outSize - psfSize
psf = np.pad(psf, ((0, padSize[0]), (0, padSize[1])), 'constant')
for i in range(len(psfSize)):
psf = np.roll(psf, -int(psfSize[i] / 2), i)
otf = np.fft.fftn(psf)
nElem = np.prod(psfSize)
nOps = 0
for k in range(len(psfSize)):
nffts = nElem / psfSize[k]
nOps = nOps + psfSize[k] * np.log2(psfSize[k]) * nffts
if np.max(np.abs(np.imag(otf))) / np.max(np.abs(otf)) <= nOps * np.finfo(np.float32).eps:
otf = np.real(otf)
return otf