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 を使用して新しいデータ ポイントを量子化する方法は?