2017-07-24 65 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的幂,而不是西格玛。