前言
一提到聚类算法,必然首先会想到的是kmeans聚类,因为它的名气实在太大了。最近,刚好要使用OpenCV中Kmeans函数。这节内容主要是讲讲OpenCV中kmeans函数的使用方法。
开发环境:OpenCV2.4.8+VS2013
实验基础
在使用kmeans之前,必须先了解kmeans算法的2个缺点:第一是必须人为指定所聚的类的个数k;第二是如果使用欧式距离来衡量相似度的话,可能会得到错误的结果,因为没有考虑到属性的重要性和相关性。为了减少这种错误,在使用kmeans距离时,一定要使样本的每一维数据归一化,不然的话由于样本的属性范围不同会导致错误的结果。
实验一是对随机产生的sampleCount个二维样本(共分为clusterCount个类别),每个类别的样本数据都服从高斯分布,该高斯分布的均值是随机的,方差是固定的。然后对这sampleCount个样本数据使用kmeans算法聚类,最后将不同的类用不同的颜色显示出来。
下面是程序中使用到的几个OpenCV函数:
void RNG::fill(InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false )