天天看點

c語言峰值算法_關于算法:将高斯曲線拟合到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建立一個峰值:-)。

我認為隻有當所有高斯曲線都有相同的方差時,反褶積才能解決這個問題。

不,但這确實使它更容易。你沒有說你的多模性是由什麼引起的,但我想多峰大緻是等變的。

我認為你估計單個高斯參數的方法是正确的。

對于多個高斯人,您可能希望查找混合模型或更具體地說是高斯人的混合。隻需注意幾點:

(你可能已經知道)組合中最強的高斯值不一定是最高峰值的高斯值。

如果您有兩個具有不同平均值的高斯人的總和,柱狀圖中的峰值将與平均值不比對。

使用離散直方圖中單個峰值的高度可能不是一個好主意:實際峰值可能位于兩個直方圖箱之間。[說明:在這種情況下,兩個存儲箱中的計數可能明顯低于以存儲箱為中心的峰值。]而且,對于大多數類型的資料,柱狀圖将包含大量噪聲。至少在柱狀圖上使用某種平均過濾。