使用C++、opencv中的Kmeans进行图像分割
K-means算法的原理
K-means算法是基于距离相似性的聚类算法,通过比较样本之间的相似性,将形式的样本划分到同一个类别中,K-Means算法的基本过程为:
- 初始化常数 ,随机初始化k个聚类中心。
- 重复计算以下过程,直到聚类中心不再改变:
计算每个样本与每个聚类中心之间的相似度,将样本划分到最相似的类别中;
计算划分到每个类别中的所有样本特征的均值,并将该均值作为每个类新的聚类中心;
- 输出最终的聚类中心以及每个样本所属的类别。
在K-Means算法中,需要随机初始化k个聚类中心,而K-Means算法对初始聚类中心的选取较为敏感,若选择的聚类中心不好,则得到的聚类结果会非常差,因此,对K-Means算法提出了很多的改进的方法,如K-Means++算法,在K-Means++算法中,希望初始化的k个聚类中心之间的距离尽可能的大,其具体过程为:
- 在数据集中随机选择一个样本点作为第一个初始化的聚类中心
- 选择出其余的聚类中心:
计算样本中的每一个样本点与已经初始化的聚类中心之间的距离,并选择其中最短的距离
以概率选择距离最大的样本作为新的聚类中心,重复上述过程,直到 个聚类中心都被确定
- 对k个初始化的聚类中心,利用K-Means算法计算最终的聚类中心。
更多关于 K-Means算法的原理可查看:https://www.cnblogs.com/pinard/p/6164214.html

本文介绍了如何使用C++和OpenCV的K-means算法进行图像聚类分割。K-means是一种基于距离的聚类算法,对初始聚类中心敏感。通过K-means++改进算法选择聚类中心,确保它们之间距离最大化。OpenCV的kmeans函数提供聚类操作,参数包括数据、类别数、终止条件等。通过将像素点值作为聚类元素,可以将图像分割成多个类别。
最低0.47元/天 解锁文章
1357

被折叠的 条评论
为什么被折叠?



