2017-07-24 53 views
0

我使用GMM分離出2個重疊的高斯。一個是信號,另一個是背景。背景始終具有比信號更低的值和均值。大多數時候,gmm.means_的順序是[lower_mean,higher_mean],這使得它預測0作爲背景,1預測爲信號。有時候,平均值的階數是[higher_mean,lower_mean],這使得GMM預測它爲0,噪聲1(與我想要的相反)。我希望具有較低均值的高斯是背景(0),並且具有較高均值的一個是信號(1)。如何將GMM結果設置爲正確的順序或如何設置預測輸出?基於高斯均值的scikit-learn高斯混合模型集預測輸出

img = cv2.imread(path, -1) 
img_flatten = img.flatten().reshape(img.flatten().shape[0],1) 

gmm = GaussianMixture(n_components=2, covariance_type='full') 
gmm.fit(img_flatten) 
pred = gmm.predict(img_flatten) # how can I set the prediction value I want for each Gaussian? 

print(np.round(g.means_, 2)) 
# gives [[ 66.31] [ 203.64]] on some images and [[ 67.32] [ 306.13]] on other 

回答

1

斯托弗和Grimson的「自適應背景混合物模型實時跟蹤」的文章討論了啓發式,以確定其中GMM corrspond到背景的部件。他們建議按照w/sigma的值對高斯進行排序(w是混合權值,sigma是std的值)。前k個應該是背景。如何選擇k取決於每個問題,並在論文中討論。

但是它僅僅是兩個高斯的情況,也許你可以檢查具有最高w/sigma的高斯分量是否總是對應​​於同一個類。

一個更多的細節:在該論文中,西格馬是一維高斯的標準。在你的情況下,你似乎有N維高斯。在這種情況下,您可以將協方差的行列式替換爲1/2的冪,而不是西格瑪。