我正在尝试对一组 4D 向量进行聚类,但事先不知道应该有多少个聚类。在过去,我已经能够使用 cvKmeans2 进行聚类,只要知道聚类的数量。我正在浏览 API 并遇到cv::flann::hierarchicalClustering
. 这看起来会做我需要的(即,执行k-means,在必要时拆分集群,迭代直到拆分使结果恶化),但我真的在“索引参数”上苦苦挣扎。
我发现我需要创建一个作为第二个参数的索引结构,但是我从以下代码中得到一个错误:
cv::flann::Index fln_idx = cv::flann::KMeansIndexParams::createIndex( framePoints );
错误是:
../src/segmentation_1.cpp:592: error: cannot call member function ‘virtual flann::Index* cv::flann::KMeansIndexParams::createIndex(const cv::Mat&) const’ without object
framePoints
定义如下:
CvMat *framePoints = cvCreateMat( frameTracklets.size( ), 4, CV_32FC1 );
我很确定我在做一些非常愚蠢的事情(我的 C++ 知识还可以,但不是很好)。我想我已经发布了所有相关的代码,但如果没有,请告诉我,我会发布更多。
提前致谢!
更新
我遵循了 LumpN 的建议并使用以下内容创建了一个 Kmeans 对象:
cv::Mat centres;
cv::flann::KMeansIndexParams fln_idx = cv::flann::KMeansIndexParams();
fln_idx.createIndex( framePoints );
int numClust;
numClust = hierarchicalClustering(framePoints, centres, fln_idx);
现在,当我运行它时,我收到一条错误消息,hierarchicalClustering()
例如“所需集群的数量应该是>= 1
”(我需要检查何时开始工作 - 我将使用实际错误进行更新)。我假设它createIndex()
给出了起点,然后hierarchicalClustering()
拆分集群直到找到一个好的结果(不确定这是否是最佳的)。我需要cv::flann::KMeansIndexParams()
用一些参数打电话吗?我看过api,完全糊涂了!再次感谢!