我想使用Opencv cv :: flann :: KmeansIndex来构建一个分层的k-means树来进行聚类。 做完后
typedef cv::flann::L2<float> Distance;
int featureNum =1000000;
int dim =2;
float *data = new float[featureNum*dim];
for(int i=0;i<1000000;++i)
{
data[i*2]=(float)(rand()%255);
data[i*2+1]=(float)(rand()%255);
}
cvflann::Matrix<Distance::ElementType> features(data,featureNum,dim);
float *center = new float[10000*2];
flann::Matrix<float> centers(center,10000,2);
cvflann::KMeansIndexParams indexParams(10,1);
int n = cvflann::hierarchicalClustering<Distance>(features,centers,indexParams);
cout<<n<<endl;
2D点被聚类成10 ^ 4个类别。
但是如果出现了一个新数据,我怎么知道它属于哪个类别呢? 我认为cv :: flann :: KmeansIndex可能会有所帮助。
这样做之后:
KMeansIndex<Distance> kmeans(features, indexParam, d);
kmeans.buildIndex();
建立了索引。
但是
如何使用KmeansIndex量化新数据点?