用Python+OpenCV实战SFR算法:从PSF模拟到MTF曲线生成
在图像质量评估领域,空间频率响应(SFR)算法是衡量光学系统分辨率的核心方法。但大多数教程停留在理论推导,让开发者难以将数学公式转化为可执行的代码。本文将用Python和OpenCV带你完整实现SFR算法链路,通过代码理解点扩散函数(PSF)、线扩散函数(LSF)、边缘扩散函数(ESF)的物理意义及其数学转换关系。
1. 环境配置与基础概念
首先确保已安装Python 3.8+和以下依赖库:
bash复制pip install opencv-python numpy matplotlib scipy
PSF的物理本质:想象用显微镜观察一个理想点光源时,由于光学系统衍射和像差,实际成像不是一个点,而是一个光斑。这个二维分布就是PSF,数学上可表示为:
python复制def gaussian_psf(size=256, sigma=10):
"""生成高斯型点扩散函数"""
rows = cols = size
center = size // 2
psf = np.zeros((rows, cols))
for i in range(rows):
for j in range(cols):
psf[i,j] = np.exp(-((i-center)**2 + (j-center)**2)/(2*sigma**2))
return psf / psf.sum() # 归一化
执行plt.imshow(gaussian_psf())可观察到典型的圆形对称分布。sigma参数控制模糊程度:
| σ值 | PSF直径 | 应用场景 |
|---|---|---|
| 5 | ~30px | 高质量镜头 |
| 15 | ~90px | 普通手机摄像头 |
| 30 | ~180px | 严重光学像差系统 |
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从PSF到LSF的代码实现
线扩散函数(LSF)是PSF沿某一方向的积分投影。假设我们关注水平方向的LSF:
python复制d
