python - 尝试使用 scipy.interpolate 计算 FWHM 时出现问题

标签 python image-processing scipy interpolation spline

我在尝试查找某些数据的 FWHM 时遇到问题。我最初尝试使用 interpolate.interp1d 来拟合曲线。有了这个,我就能够创建一个函数,当我输入 x 值时,它将返回插值的 y 值。问题是我需要这个功能的逆功能。换句话说,我想切换自变量和因变量。当我尝试切换它们时,我收到错误,因为必须对独立数据进行排序。如果我对数据进行排序,我将丢失索引,从而丢失图表的形状。

我尝试过:

x = np.linspace(0, line.shape[0], line.shape[0])
self.x_curve = interpolate.interp1d(x, y, 'linear')

其中 y 是我的数据。

为了得到逆,我尝试了:

self.x_curve = interpolate.interp1d(sorted(y), x, 'linear')

但值已关闭。

然后我继续尝试使用 UnivariateSpline 并获取根来查找 FWHM(来自此问题: Finding the full width half maximum of a peak ),但 root() 方法始终给我一个空列表 [].

这是我使用的:

x_curve = interpolate.UnivariateSpline(x, y)
r = x_curve.roots()
print(r)

这是数据图像(使用 UnivariateSpline):

Data plot

有什么想法吗?谢谢。

最佳答案

仅当您移动数据使其在 FWHM 处的值为 0 时,使用 UnivariateSpline.roots() 获取 FWHM 才有效。

由于数据背景有噪声,我首先估计基线。例如:

y_baseline = y[(x<200) & (x>350)].mean()

(根据需要调整 x 的限制)。然后移动数据,使基线和峰值的中间位于 0。看到您的数据有最小值而不是最大值,如示例中所示,我使用 y.min() :

y_shifted = y - (y.min()+y_baseline)/2.0

现在将样条曲线拟合到这个移位的数据上,roots() 应该能够找到根,其差异就是 FWHM。

x_curve = interpolate.UnivariateSpline(x, y_shifted, s=0)
x_curve.roots()

如果您想根据平滑数据估计 FWHM,请增加 s 参数。

关于python - 尝试使用 scipy.interpolate 计算 FWHM 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376574/

相关文章:

python - 使用 minit ='matrix' 时,scipy 的 kmeans2 算法是否也会权衡初始质心集?

image - SIFT 是做什么的?

python - scipy中0阶上不完全 Gamma 函数

python - numpy.cov() 函数是如何实现的?

python - python 中的预条件共轭梯度和线性算子

python - 在 Python 中转换字符串以插入 MySQL 数据库日期列日期

python - 使用递归计算字符串中的元音

python - 使用Python将本地服务器上的一个目录中的多个文件传输到远程服务器上的不同目录

image-processing - 在 OpenCV 中匹配相似图像

c++ - 数组或图像中的唯一值数字