本文将详细介绍K-Means均值聚类的算法及实现。
聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程。K均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。
算法过程:
1,初始化聚类数目K,并任意选择K个初始化均值ui。
2,迭代图像中每个像素f(x,y),判断其距离哪一个聚类均值最近,即|f(x,y)-ui|最小,则将该像素划分归属为对应的聚类i。
3,完成一次迭代后,计算每一个聚类的新的均值ui,均值公式不在重复。
4,重复步骤2-3,直到相邻两次迭代中每一个聚类的ui不在发生变化,则迭代结束。
5,得到最后的分类结果。
注:本文代码中采用的是对灰度图像进行 KMeans 聚类,然后还原彩色信息。
下面 我们给出一份Win8 C#代码,另附一份Winform C#代码DEMO,在文章末尾链接 中。
- ///
- /// KMeans Cluster process.
- ///
- /// The source image.
- /// Cluster threshould, from 2 to 255.
- ///
- public static WriteableBitmap KMeansCluster(WriteableBitmap src,int k)KMeansCluster
- {
- if (src != null)
- {
- int w = src.PixelWidth;
- int h = src.PixelHeight;
- WriteableBitmap dstImage = new WriteableBitmap(w, h);