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创建一个峰值:-)。
- 我认为只有当所有高斯曲线都有相同的方差时,反褶积才能解决这个问题。
- 不,但这确实使它更容易。你没有说你的多模性是由什么引起的,但我想多峰大致是等变的。
我认为你估计单个高斯参数的方法是正确的。
对于多个高斯人,您可能希望查找混合模型或更具体地说是高斯人的混合。只需注意几点:
(你可能已经知道)组合中最强的高斯值不一定是最高峰值的高斯值。
如果您有两个具有不同平均值的高斯人的总和,柱状图中的峰值将与平均值不匹配。
使用离散直方图中单个峰值的高度可能不是一个好主意:实际峰值可能位于两个直方图箱之间。[说明:在这种情况下,两个存储箱中的计数可能明显低于以存储箱为中心的峰值。]而且,对于大多数类型的数据,柱状图将包含大量噪声。至少在柱状图上使用某种平均过滤。