我正在尝试对一组4D vector 进行聚类,而不事先知道应该有多少个聚类。过去,在了解群集数量的情况下,我已经能够使用cvKmeans2进行群集。我正在浏览API,并遇到了 cv::flann::hierarchicalClustering 。看起来它将满足我的需要(即执行k均值,在必要时拆分簇,迭代直到拆分使结果恶化),但是我确实在为“索引参数”苦苦挣扎。

我发现我需要创建一个index structure作为第二个参数,但是我从以下代码中得到了一个错误:
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 objectframePoints定义如下:
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,感到非常困惑!
再次感谢!

最佳答案

您必须传递对createIndex的引用,即createIndex(*framePoints)(请注意星号!)。另一个错误可能是createIndex是非静态(成员)函数。在这种情况下,您必须创建一个KMeansIndexParams对象,并在该对象上调用createIndex

关于c++ - 不了解 “k”的OpenCV中的分层k均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5461357/

10-09 05:36