【问题标题】:How can I find the FWHM of a peak in a noisy data set in python (numpy/scipy)?如何在 python (numpy/scipy) 中的嘈杂数据集中找到峰值的 FWHM?
【发布时间】:2014-06-12 21:29:47
【问题描述】:

我正在分析两条交叉线(如 + 号)的图像,并且我正在提取垂直于其中一条线的像素线(nx1 numpy 数组)。这给了我一个浮点值数组(代表颜色),然后我可以绘制它们。我正在使用 matplotlib 绘制数据,我得到了一堆介于 180 到 200 之间的噪声数据,中间有一个明显的峰值,峰值下降到 100 左右。

我需要找到这些数据的 FWHM。我想我需要先过滤噪声,所以我使用了一个高斯滤波器,它平滑了我的数据,但它的顶部仍然不是超级平坦。

  1. 我想知道是否有更好的方法来过滤数据。

  2. 如何找到这些数据的 FWHM?

如果可能,我只想使用 numpy、scipy 和 matplotlib。

这是原始数据:

这是过滤后的数据:

【问题讨论】:

  • 图片少了抱歉……我的声望超过10(今天刚注册)才能添加图片。
  • 欢迎来到 Stack Overflow!看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • stackoverflow.com/questions/10582795/… 的 FWHM 答案应该为您指明正确的方向。

标签: python image-processing filter


【解决方案1】:

我最终没有使用任何过滤器,而是使用了原始数据。 我使用的程序是:

  • 找到最小和最大点并计算difference = max(arr_y) - min(arr_y)
  • 找到了半个最大值(在我的例子中是半个最小值)HM = difference / 2
  • 找到离HM最近的数据点:nearest = (np.abs(arr_y - HM)).argmin()
  • 计算最接近和最小之间的距离(这给了我 HWHM)
  • 然后简单地乘以 2 得到 FWHM

我不知道(或认为)这是最好的方法,但它很有效,并且根据比较似乎相当准确。

【讨论】:

    【解决方案2】:

    您的脚本已经进行了正确的计算。

    但是,当取nearest_abovenearest_below 之间的距离时,可以减少您在nearestpos_extremum 之间的距离的误差 - 位置在其两侧的极值(最大值/最小值)的一半。

    import numpy as np
    
    # Example data
    arr_x = np.linspace(norm.ppf(0.00001), norm.ppf(0.99999), 10000)
    arr_y = norm.pdf(arr_x)
    
    # Effective code
    difference = max(arr_y) - min(arr_y)
    HM = difference / 2
    
    pos_extremum = arr_y.argmax()  # or in your case: arr_y.argmin()
    
    nearest_above = (np.abs(arr_y[pos_extremum:-1] - HM)).argmin()
    nearest_below = (np.abs(arr_y[0:pos_extremum] - HM)).argmin()
    
    FWHM = (np.mean(arr_x[nearest_above + pos_extremum]) - 
            np.mean(arr_x[nearest_below]))
    

    对于这个例子,你应该得到 FWHM 和标准差之间的关系: FWHM = 2.355 乘以 Wikipedia 中提到的标准偏差(此处为 1)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2018-07-07
      • 2022-12-13
      • 1970-01-01
      相关资源
      最近更新 更多