1

我想使用 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 量化新数据点?

4

0 回答 0