聚类算法——K-means, K-means++, KNN, GMM,

K-means算法是一种常用的数据聚类方法,通过迭代更新类中心和分配样本至最近的类来实现数据划分。在OpenCV库中,kmeans函数提供了一种实现方式,接受样本数据、类别数、精度标准等参数,用于执行聚类过程。K-means++是一种改进的初始化方法,能更好地解决初始中心点选择问题,提高聚类效果。此外,KNN作为另一种聚类算法,基于最近邻原则进行分类,而GMM(高斯混合模型)则利用多个高斯分布来拟合数据,适用于更复杂的分布情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K-means 算法思想:

1.初始化聚类个数及中心点。人为给定。

2.划分数据到每个类。计算样本数据到各聚类中心的距离(欧式距离或其他距离等),把每个样本划分到最近的类中。

3.重新计算类中心点。一般是求坐标平均值。

4.重复2、3步骤。直到聚类中心不再移动位置。

opencv函数kmeans使用方法:

原型:double kmeans(InputArray data, int K, InputOutputArray bestLabels, TermCriteria criteria, int attempts, int flags, OutputArray centers=noArray() )

    data:[IN] 输入样本,一行是一个样本。类型float。

    K:[IN] 类别数

    bestLabels:[OUT] 输出类别标签。与data有相等行数,1列,类型CV_32SC1

    criteria:[IN] 精度设置。TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 10, 1.0)

示例:

void test_kmeans(Mat& img, int K)
{
	Mat binary_img;
	threshold(img, binary_img, 230, 255, THRESH_BINARY_INV);
	Mat centers, labels;
	int sample_count = countNonZero(binary_img);
	vector<Point2f> samples_point(sample_count);
	int temp_count(0);
	for (int row = 0; row < bin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值