Hak*_*kim 1 matlab cluster-analysis image-processing gaussian k-means
我知道这Gaussian mixture model是一个概括K-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))
Run Code Online (Sandbox Code Playgroud)
并在下面显示原始图像,以及聚类结果:
原始图片:
K-方式:
高斯混合模型:
PS:我只使用强度信息进行聚类,聚类的数量是2(即水和土地).
小智 5
我认为这是一个有趣的问题/问题,所以我花了一些时间玩.
首先,高斯混合模型应该比k均值更准确的假设不一定正确.他们有不同的假设,虽然GMM更灵活,但没有规则说应该总是更好,特别是对于像图像分类那样主观的东西.
使用k-means聚类,您试图将像素分配给两个桶中的一个,纯粹基于与该桶的平均值或质心的距离.如果我看一下河里的斑点噪声,这些值就会落在两个质心之间.绘制图像的直方图并叠加质心的位置和斑点噪声,我得到:
您可以看到斑点噪声更接近较暗物质(水)的质心,因此它被分配给水桶.这与具有相等方差和相等权重的高斯混合模型基本相同.
GMM的一个优点是能够考虑两个类别的方差.GMM不是简单地找到两个质心并在它们之间画一条线来分隔您的类别,而是找到两个最适合您数据的高斯.这是一个非常好的示例图像,因为您可以清楚地看到两个主要形状:一个高而瘦,一个短而宽.GMM算法将数据视为:
在这里你可以看到斑点噪声明显属于土地的广泛变化pdf.
k-means和GMM之间的另一个区别在于像素是如何聚类的.在GMM中,这两个分布用于为每个像素分配概率值,因此它是模糊的 - 它没有说"这个像素肯定是土地",它说(例如)"这个像素有30%的可能性是水并且有70%的机会成为土地",所以它将其分配为土地.在这个特定的例子中,水直方图非常紧,所以它(在这种情况下不正确)决定了散斑噪声实际上不太可能是水.