You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Python中对应MATLAB otf2psf函数的实现库

实现MATLAB otf2psf 功能的Python方案

目前没有专门的成熟Python库直接提供和MATLAB otf2psf完全一致的开箱即用功能,但可以基于逆傅里叶变换(IFFT)手动实现,逻辑和你找到的psf2otf代码完全对应,反向完成转换。

核心实现逻辑

OTF到PSF的转换本质是逆多维傅里叶变换,同时需要修正psf2otf过程中做的循环移位,确保PSF的原点回到中心,最后取实部(因为PSF是实值信号)。

代码实现

import numpy as np

def otf2psf(otf, output_size=None):
    # 获取输入OTF的尺寸
    otf_shape = np.array(otf.shape)
    if output_size is None:
        output_size = otf_shape
    
    # 执行逆多维傅里叶变换
    psf = np.fft.ifftn(otf)
    
    # 相位校正:逆循环移位,对应psf2otf的移位操作
    for axis in range(psf.ndim):
        psf = np.fft.ifftshift(psf, axes=axis)
    
    # 取实部(数值计算误差可能产生极小虚部,直接丢弃)
    psf = np.real(psf)
    
    # 调整输出尺寸:裁剪或补零到目标大小
    if not np.array_equal(output_size, otf_shape):
        start_indices = (otf_shape - output_size) // 2
        end_indices = start_indices + output_size
        slice_obj = tuple(slice(s, e) for s, e in zip(start_indices, end_indices))
        psf = psf[slice_obj]
    
    return psf

关键说明

  • 该函数和MATLAB otf2psf的行为对齐:支持指定输出尺寸、自动校正相位移位、处理多维OTF(2D/3D)
  • 如果需要和MATLAB的计算结果完全一致,注意保持数据类型(如双精度float64)一致,避免数值精度差异
  • 你找到的psf2otf代码中做的FFT移位和尺寸扩展,这里通过逆操作完全对应还原

内容的提问来源于stack exchange,提问作者Dhakshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:57:10