gpt4 book ai didi

c++ - 不知道 "k"的 OpenCV 中的分层 k-Means

转载 作者:搜寻专家 更新时间:2023-10-31 01:57:33 26 4
gpt4 key购买 nike

我正在尝试对一组 4D vector 进行聚类,但事先不知道应该有多少个聚类。过去,我已经能够使用 cvKmeans2 进行聚类,因为知道聚类的数量。我在浏览 API 时遇到了 cv::flann::hierarchicalClustering .这看起来会做我需要的事情(即,执行 k-means,在必要时拆分集群,迭代直到拆分使结果恶化),但我真的在为“索引参数”而苦苦挣扎。

我发现我需要创建一个 index structure它作为第二个参数进入,但我从以下代码中收到错误:

cv::flann::Index fln_idx = cv::flann::KMeansIndexParams::createIndex( framePoints );

错误是:

../src/segmentation_1.cpp:592: 错误:无法调用成员函数 'virtual flann::Index* cv::flann::KMeansIndexParams::createIndex(const cv::Mat&) const'对象

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 并感到非常困惑!再次感谢!

最佳答案

“所需集群的数量必须至少为 1”。

所需的簇数由 centers.rows 决定。所以你必须先调整中心的大小。例如:

Mat centers (clusterCount,DESCRIPTOR_SIZE,cv_32FC1);
int count = cv::flann::hierarchicalClustering<cvflann::L2<float> >(descriptors,centers,cvflann::KMeansIndexParams(32,11,cvflann::FLANN_CENTERS_KMEANSPP));

关于c++ - 不知道 "k"的 OpenCV 中的分层 k-Means,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5461357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com