K-means 在某些图像区域比高斯混合模型更准确

K-means more accurate than Gaussian mixture model in certain image regions

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

但我无法在下面的聚类图像上说出为什么 K-means 获得的结果在某些区域更准确(如显示为浅蓝色点的散斑噪声,在 [=14 的河流中持续存在) =] 结果,但不在 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))

下面是原图,以及聚类后的结果:

原图:

K-均值:

高斯混合模型:

P.S:我是单独使用强度信息进行聚类,聚类的数量是2(即水和陆地)。

我觉得这很有趣question/problem,所以我花了点时间玩了一下。

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

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

可以看到散斑噪声更靠近颜色较深的东西(水)的质心,所以分配给了水桶。这和等方差等权重的高斯混合模型基本是一回事

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

这里可以看到散斑噪声明显落在land pdf的宽方差范围内。

k-means 和 GMM 的另一个区别在于像素的聚类方式。在 GMM 中,这两个分布用于为每个像素分配一个概率值,因此它是模糊的 - 它没有说 "this pixel definitely is land",而是说(例如)"this pixel has a 30% chance of being water and a 70% chance of being land",因此它分配为土地。在此特定示例中,水直方图非常紧凑,因此它(在这种情况下是错误的)决定该斑点噪声实际上不太可能是水。