直方图峰识别和高斯拟合,c ++中累积高度差最小

时间:2011-04-05 09:36:58

标签: algorithm histogram curve-fitting

前一段时间我已在问题中提出了类似的问题:previous thread。到目前为止,我遗憾地无法完全解决这个问题,只能解决这个问题。由于很难在前一个线程中包含所有新信息 我在这里发布了一个带有不同上下文的精炼和扩展问题,并将其链接到旧线程。

我目前正在实施一种来自paper的算法,该算法通过动态识别数据集直方图中的值范围来提取3D数据集的某些区域。 以简化的方式,该方法可以描述如下:

  1. 在直方图中找到最高峰
  2. 将高斯拟合到峰值
  3. 使用由高斯定义的值范围表示(μ)+/-偏差(ϭ)某些区域 识别直方图,并从原始直方图中删除这些区域的体素(= 3D像素)。
  4. 作为上一步的结果,应该显示一个新的最高峰,基于此 可以重复步骤1-3。重复这些步骤,直到数据集直方图为空。
  5. 我的问题涉及上述描述的步骤1和2,其描述如下:“识别最高峰并且高斯曲线与其形状拟合。高斯由其中点μ,高度描述h和偏差ϭ。拟合过程最小化直方图和高斯中间部分之间的累积高度差。误差求和范围是 μ+ /ϭ? “1

    在下文中,我将提出我的问题并添加我对它们的反思:

    1. 我应该如何识别描述最高峰的总直方图中的那些箱?为了识别它的顶点,我只需运行直方图并存储具有最高频率的bin的索引。但是,峰值的延伸应该到达最高区域的左侧和右侧。目前,只要下一个箱子比前一个箱子小,我就可以直接进入最高箱子的左右两侧。然而,这通常是非常小的范围,因为直方图中出现折痕(迷你峰)。我已经考虑过平滑直方图了。但是在每次迭代之后我都必须这样做,因为减去体素(上面的描述中的步骤3)可以使直方图再次包含折痕。而且我也担心重复的平滑会扭曲结果。 因此,我想问一下,是否有一种有效的方法来检测峰值的延伸,这比我目前的方法更好。在previous thread中有关于混合模型和反卷积的建议。但是,如果直方图的形状在每次迭代后不断变化,这些方法真的合理吗?
    2. 如何将高斯曲线拟合到所识别的峰值,以使直方图和高斯中间部分之间的累积高度差最小化? 根据{{​​3}}中的问题,我通过计算它们的平均值和偏差来将曲线拟合到给定范围的直方图箱(我希望这是正确的?!)。但是,如何从这一点最小化直方图和高斯中间部分之间累积的高度差?
    3. 感谢您的帮助! 关心马克

1 个答案:

答案 0 :(得分:1)

向左和向右添加直方图值,直到拟合的好处开始减少。