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

如何简便对存在像素饱和截断的闪光图像进行二维高斯拟合求解?

饱和截断闪光图像的二维高斯拟合恢复方案

数据曲面图

astropy.convolution.interpolate_replace_nans得到的替换值低于255的核心原因是:该函数属于邻域插值算法,仅能在现有有效观测值的范围内做内插计算,不会对分布的趋势做外推,自然无法输出超过255的饱和区真实估计值。

你可以直接基于astropy.modeling模块的内置二维高斯模型完成拟合,仅用非饱和值参与计算即可外推得到饱和区的理论值,具体步骤如下:

1. 数据预处理

  • 遍历原始图像数组,将所有像素值>=255的位置标记为无效值(设为NaN),仅保留像素值<255的有效数据参与拟合,避免截断的饱和值拉低高斯峰值的拟合结果
  • 若图像存在稳定的全局背景,可先统计非闪光区域的平均背景值,从所有有效像素中扣除背景,进一步提升拟合精度

2. 二维高斯拟合实现

无需手动推导最小二乘公式,直接调用astropy内置的模型和拟合器即可,示例代码如下:

import numpy as np
from astropy.modeling import models, fitting

# 读取原始图像,img为二维numpy数组
img = 待处理的图像数据
y_grid, x_grid = np.mgrid[:img.shape[0], :img.shape[1]]

# 筛选非饱和的有效数据点
valid_mask = img < 255
x_valid = x_grid[valid_mask]
y_valid = y_grid[valid_mask]
z_valid = img[valid_mask]

# 初始化二维高斯模型,可根据光斑实际情况调整初始参数
gauss_model_init = models.Gaussian2D(
    amplitude = np.max(z_valid),
    x_mean = np.mean(x_valid[z_valid == np.max(z_valid)]),
    y_mean = np.mean(y_valid[z_valid == np.max(z_valid)]),
    x_stddev = 8,  # 按光斑实际尺寸调整初始值
    y_stddev = 8,
    bounds = {"amplitude": (200, 1500)} # 限制振幅合理范围,避免拟合发散
)

# 执行拟合
fitter = fitting.LevMarLSQFitter()
gauss_fit_result = fitter(gauss_model_init, x_valid, y_valid, z_valid)

3. 重构饱和区域像素值

用拟合得到的高斯模型计算所有像素位置的理论值,即为恢复后的图像:

# 计算全图所有位置的高斯理论值
img_recovered = gauss_fit_result(x_grid, y_grid)
# 可选:非饱和区域保留原始观测值,仅替换饱和区域
img_recovered[valid_mask] = img[valid_mask]

注意事项

  • 若光斑存在明显的非对称特征,可放开Gaussian2D的theta参数(旋转角)的默认固定设置,允许模型拟合倾斜的高斯分布
  • 拟合完成后可先输出gauss_fit_result.amplitude值,确认高斯峰值高于255符合预期,若结果偏差大可调整初始参数或参数的约束范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:06:05