关于算法:将高斯曲线拟合到c ++中的某个直方图峰值

Fitting a gauss curve to a certain histogram peak in c++

关于如何将高斯曲线拟合到柱状图峰值,我有两个问题。我的第一个问题是一个非常基本的问题:

  • 如何将高斯曲线拟合到整个柱状图?这仅仅意味着我必须找出并计算平均值(μ)和偏差(?)并将其放入高斯曲线的公式中?
  • 下面的例子对吗?:假设(举个例子)我有一个带有5个颜色值的图像直方图。在x轴上有5个颜色值,在y轴上有每个颜色值的频率。即。:

    值1:1次

    值2:4次

    值3:7次

    值4:3次

    值5:2次

    现在平均值(μ)为3(μ=3)。

    偏差(?)会是0.9(?=0.9)。公式:

    现在我用密度函数公式中的这些值来计算高斯曲线?

    对吗?不幸的是,我对数学背景有点不太了解。

  • 我的第二个问题有点棘手:这次,我有一个有几个峰值的柱状图,但是我只想把高斯曲线拟合到最高的峰值。所以,我用一个简单的for循环遍历柱状图中的所有bin,在x轴上找到一个强度值(它包含图像的强度)。最大频率(显示在Y轴上)。这将是最高的山峰。但我该如何找出偏差呢?尤其是,因为我没有知道我的计算中应该包括哪些强度值。据我所知,高斯曲线的转折点在μ+?还有μ-?那有助于解决问题吗?
  • 我很抱歉这个问题有点数学化,但我找不到更好的地方问它。我也读了一些类似的话题,但不幸的是,他们最终没有回答我的问题。

    谢谢你的帮助!

    尊敬的马克


    对于单个峰值,您的简单方法应该是可以的。[顺便说一句,我认为这是一个与图像相关的编程问题。]

    多峰比较困难。解决峰值的过程称为反褶积(http://en.wikipedia.org/wiki/decolution),通常没有唯一的答案。您可能需要决定有多少个峰值,或者一个峰值的最小方差是多少(否则您可以为每个bin创建一个峰值:-)。


    我认为你估计单个高斯参数的方法是正确的。

    对于多个高斯人,您可能希望查找混合模型或更具体地说是高斯人的混合。只需注意几点:

  • (你可能已经知道)组合中最强的高斯值不一定是最高峰值的高斯值。
  • 如果您有两个具有不同平均值的高斯人的总和,柱状图中的峰值将与平均值不匹配。
  • 使用离散直方图中单个峰值的高度可能不是一个好主意:实际峰值可能位于两个直方图箱之间。[说明:在这种情况下,两个存储箱中的计数可能明显低于以存储箱为中心的峰值。]而且,对于大多数类型的数据,柱状图将包含大量噪声。至少在柱状图上使用某种平均过滤。