K-means 在某些图像区域比高斯混合模型更准确
K-means more accurate than Gaussian mixture model in certain image regions
我知道 Gaussian mixture model
是 K-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",因此它分配为土地。在此特定示例中,水直方图非常紧凑,因此它(在这种情况下是错误的)决定该斑点噪声实际上不太可能是水。
我知道 Gaussian mixture model
是 K-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",因此它分配为土地。在此特定示例中,水直方图非常紧凑,因此它(在这种情况下是错误的)决定该斑点噪声实际上不太可能是水。