在某些图像区域中,K均值比高斯混合模型更准确

时间:2016-03-31 11:01:33

标签: matlab image-processing cluster-analysis k-means gaussian

我知道Gaussian mixture modelK-means的概括,因此应该更加准确。

但是我无法在下面的聚类图像上看出为什么K-means获得的结果在某些区域更准确(就像斑点噪声显示为浅蓝色点,在Gaussian Mixture Model中持续存在于河中结果但不在K-means结果中)。

以下是两种方法的matlab代码:

% kmeans
L1 = kmeans(X, 2, 'Replicates', 5);
kmeansClusters = reshape(L1, [numRows numCols]);
figure('name', 'Kmeans clustering')
imshow(label2rgb(kmeansClusters))

% gaussian mixture model
gmm = fitgmdist(X, 2);
L2 = cluster(gmm, X);
gmmClusters = reshape(L2, [numRows numCols]);
figure('name', 'GMM clustering')
imshow(label2rgb(gmmClusters))

以下是原始图像以及聚类结果:

原始图片:

Original image

K均值:

K-means clusters

高斯混合模型:

Gaussian Mixture Model

P.S :我仅使用强度信息进行聚类,聚类数量为2(即水和土地)。

1 个答案:

答案 0 :(得分:5)

我认为这是一个有趣的问题/问题,所以我花了一些时间玩。

首先,高斯混合模型应该比k均值更准确的假设不一定正确。它们有不同的假设,虽然GMM更灵活,但没有规则说应该总是更好,特别是对于像图像分类那样主观的东西。

使用k-means聚类,您试图将像素分配给两个桶中的一个,纯粹基于与该桶的平均值或质心的距离。如果我看一下河里的斑点噪声,这些值就会落在两个质心之间。绘制图像的直方图并叠加质心的位置和斑点噪声,我得到了:

K-Means Centroids

你可以看到斑点噪声更接近深色物体(水)的质心,所以它被分配给水桶。这与具有相等方差和相等权重的高斯混合模型基本相同。

GMM的一个优点是能够考虑两个类别的方差。 GMM不是简单地找到两个质心并在它们之间画一条线来分隔您的类别,而是找到两个最适合您数据的高斯。这是一个非常好的示例图像,因为您可以清楚地看到两个主要形状:一个高而瘦,一个短而宽。 GMM算法将数据视为:

Gaussian Mixture Model

在这里你可以看到斑点噪声明显属于土地的广泛差异。

k-means和GMM之间的另一个区别在于像素是如何聚类的。在GMM中,这两个分布用于为每个像素分配概率值,因此它是模糊的 - 它没有说“这个像素肯定是土地”,它说(例如)“这个像素有30%的可能性是水并且有70%的机会成为土地“,所以它将其分配为土地。在这个特定的例子中,水直方图非常紧,所以它(在这种情况下不正确)决定了斑点噪声实际上不太可能是水。