首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么需要在OpenCV分层聚类中指定聚类数

为什么需要在OpenCV分层聚类中指定聚类数
EN

Stack Overflow用户
提问于 2019-04-04 00:24:40
回答 1查看 329关注 0票数 1

如果我们知道输入数据中的聚类数,我们可以使用k-means算法。但是,如果我们不知道聚类的数量,那么我们可以选择使用分层聚类算法,该算法将根据给定的相似性阈值自动返回聚类的数量。层次聚类有两个选项,即聚集式(自下而上)或分离式(自上而下),link。我想使用OpenCV分层聚类。

然而,与实际的层次聚类不同,OpenCVs hierarchicalClustering算法将中心作为参数,并使用行数作为期望聚类的数目。对我来说,OpenCV hierarchicalClustering与k-means聚类是一样的。OpenCV中有没有其他函数可以根据给定的相似度阈值返回聚类的数量?

代码语言:javascript
运行
复制
typedef cv::flann::L2<float> D;
float a[] = {0, 0, 0, 0 };

cvflann::Matrix< D::ResultType> centers(a, 2, 2, 0);

const cvflann::KMeansIndexParams params1(
        2,
       100,
       cvflann::flann_centers_init_t::FLANN_CENTERS_RANDOM,
       .2 
);


int number_of_clusters = cvflann::hierarchicalClustering<D> (features,
                                                             centers,
                                                             params1
                                                             );

我们传入的另一个参数是cb_index = 0.2。它是簇之间距离的阈值,还是作为半径阈值的簇。

EN

回答 1

Stack Overflow用户

发布于 2019-04-13 00:06:40

number_of_clusters是簇的实际数量,它可以小于中心大小。中心大小值是簇计数的最大值。

看这个example

代码语言:javascript
运行
复制
    // clustering
    Mat1f centers(clusterNum, descriptorNum);
    ::cvflann::KMeansIndexParams kmean_params;
    unsigned int resultClusters = hierarchicalClustering< L2<float> >(samples, centers, kmean_params);
    if (resultClusters < clusterNum)
    {
        centers = centers.rowRange(Range(0, resultClusters));
    }
    Index flann_index(centers, KDTreeIndexParams());
    printf("resulted clusters number: %u\n", resultClusters);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55499949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档