近期分布式三维重构系统开发里面有个模块涉及到图片的相似度判断,基于图像之间的相关性来确定是否进行sift特征匹配,依据了解的一些图像检索方面的资料,采用的方案是对基于sift特征描述向量(128维)进行分层聚类,将图像描述成BOW(bag  of words)模型,聚类算法是直接使用Opencv的cvKmeans();函数原型为:

CV_IMPL int
cvKMeans2( const CvArr* _samples, int cluster_count, CvArr* _labels,
           CvTermCriteria termcrit, int attempts, CvRNG*,
           int flags, CvArr* _centers, double* _compactness )

该函数实现在cxmatrix.cpp line 1192,函数的实现主体在kmeans函数中line849,因为没有网上的资料基本上只涉及cvKmeans2这个函数的使用接口,具体参数设置也没有明确的说明(尤其是flags),一开始仿照示例实现得到的结果有些令人费解:聚类结果还算较均匀,但是会出现没有样本数据的空子类,出于好奇就查阅了源码,搜索了cvKmeans引用的地方太多(opencv源代码的组织不是特别有规律,也可以看出此聚类算法在视觉领域相当通用的),后来才发现函数都在cxmatrix.cpp文件中;

cvKmeans2其实只是在kmeans之上进行了一层简单的封装,保持了cvArr*的使用接口(kmeans中使用的mat);

谜底在于kmeans实现细节了,函数原型为:

ouble kmeans( const Mat& data, int K, Mat& best_labels,
               TermCriteria criteria, int attempts,
               int flags, Mat* _centers )

其中Mat& best_labels可以传递初始值,此时需要将flags设为1(CV_KMEANS_USE_INITIAL_LABELS)

如果不采用此选项,初始中心有两种方式获得:

1.  if( flags & KMEANS_PP_CENTERS )
                    generateCentersPP(data, centers, K, rng, SPP_TRIALS);

KMEANS_PP_CENTERS 值为2,这里使用的是Arthur & Vassilvitskii (2007) k-means++: The Advantages of Careful Seeding里面提出的算法,具体实现细节没有认真去看,总体上对样本数据进行分析提取出合适的初始中心,重要的是使用此选项问题很好的解决了,聚类很均匀,yeah~

2.generateRandomCenter()初始以及后续为空的话都调用该函数产生随机中心(其实也不算完全随机,每次取一样的种子数样本执行结果还是一样的),一开始按照示例flags取0就是默认了此选项,为空的话产生的随机中心固定的?不然迭代那么多次结果还是空的,这种情况在低维度比较少出现,但在128维的高维空间其实也是可以理解的,随机中心会一直偏离样本阈;某些实现版本中直接取一个样本数据作为中心也是可以保证不会出现空集合的情况,但是聚类结果不如人意;

函数整体框架包括两层循环,外层是step,聚类次数,多次从原初状态独立聚类取compactness值最小的,内部就是进行最多100次迭代(收敛的话直接退出),代码层次结构还是很清晰的;

以后调用函数还是先多探究下函数的接口,特别是flags扩充函数功能的灵活接口;

另外想调试是之间进入函数代码实现中,就像mfc atl中的cpp文件一样,在VC++项目设置里添加了cpp文件的搜索路径还是没能跳进实现中进行调试,这样就不用那么麻烦去找内部繁琐的接口关系,如果谁有这方面经验的不吝赐教,万分感激~

Kmeans使用小结相关推荐

  1. [学习笔记] [机器学习] 8. 聚类算法(聚类算法:K-means、K-means++;聚类算法评估;特征降维:特征选择(Pearson相关系数、Spearman相关系数)、PCA主成分分析)

    视频链接 数据集下载地址:无需下载 1. 聚类算法简介 学习目标: 掌握聚类算法实现过程 知道 K-means 算法原理 知道聚类算法中的评估模型 说明 K-means 的优缺点 了解聚类中的算法优化 ...

  2. 【机器学习】K-Means算法优化

    K-Means算法优化 学习目标 1. Canopy算法配合初始聚类 1.1 Canopy算法配合初始聚类实现流程 1.2 Canopy算法的优缺点 2. K-means++ 3. 二分k-means ...

  3. [转载] 聚类算法总结

    参考链接: K means聚类Python–简介 聚类算法 文章目录 聚类算法聚类算法简介认识聚类算法聚类算法的概念聚类算法与分类算法最大的区别 聚类算法api初步使用api介绍案例 聚类算法实现流程 ...

  4. 机器学习之算法部分(算法篇1)

    目录 0.Introduction 1.K近邻算法--[分类算法] 1.1 K-近邻算法简介 1.1.1 K-近邻算法(KNN)概念 1.1.2 举例-电影类型分析 1.2 k近邻算法api初步使用 ...

  5. 关于kNN、kMeans、Apriori算法小结

    趁着准备即将到来的笔试,也为了回顾一下这一星期来所学的三个机器学习算法,觉得还是重新理一下思路,好理解一下这几个算法. 复制代码 kNN算法 即k-近邻算法,属监督学习. 概述 优点:精度高,对异常值 ...

  6. k-means聚类算法从入门到精通

    k-means算法是非监督聚类最常用的一种方法,因其算法简单和很好的适用于大样本数据,广泛应用于不同领域,本文详细总结了k-means聚类算法原理 . 目录 1. k-means聚类算法原理 2. k ...

  7. 十大经典数据挖掘算法之k-means

    kmeans聚类理论篇 前言 kmeans是最简单的聚类算法之一,但是运用十分广泛.最近在工作中也经常遇到这个算法.kmeans一般在数据分析前期使用,选取适当的k,将数据分类后,然后分类研究不同聚类 ...

  8. 机器学习算法(7)——K近邻(KNN)、K-means、模糊c-均值聚类、DBSCAN与层次与谱聚类算法

    1.K-近邻算法(KNN)概述 (有监督算法,分类算法) 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类.但是怎么可能 ...

  9. Python使用K-means聚类算法进行分类案例一则

    K-means算法是经典的基于划分的聚类方法,是十大经典数据挖掘算法之一,其基本思想是:以空间中k个点为中心进行聚类,对最靠近它们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类 ...

最新文章

  1. php 判断上传的是否是图片,php图片上传检测是否为真实图片格式
  2. element-ui 表格table,动态显示每一列的,重置全选
  3. MacBook file storage 256g is ok
  4. 【uniapp】swiper 添加click事件
  5. SQL性能优化-查询条件与字段分开执行,union代替in与or,存储过程代替union
  6. 手机两列布局,正方形
  7. WinPcap笔记(1):VisualStudio2015配置WinCap
  8. 阿里资深技术专家的10年感悟
  9. Java StringBuilder trimToSize()方法与示例
  10. 信息安全完全参考手册之遵循标准、法规和法律(第三章)
  11. 网页视频、flash打不开或无法播放的解决方法
  12. 正则表达式基础、原理及优化
  13. 10bit色深灰度图彩色图加载显示
  14. 福州到横店嘉兴三日游(仅供参考)
  15. php的parent_php中parent::是如何使用的?
  16. 分布式光伏站远程监控组网解决方案
  17. 第二类曲面积分、场论、高斯公式和斯托克斯公式
  18. 我以为猫咪牙齿断了一点不要紧,结果…
  19. syntax error, expect {, actual string, pos 1, fastjson-version 1.2.68
  20. 电脑端同时登陆两个微信(非网页版)

热门文章

  1. 美团小程序怎么弄 饿了么cps推广 外卖cps小程序源码 饿了么cps平台 外卖领券小程序源码 美团cps分销源码免费领取 外卖红包小程序cps 饿了么cps分销免费源码 饿了么外卖分佣小程序 ——
  2. top在mysql中的意思_数据库中top的用法
  3. 从三节课看中国互联网人教育的再发展
  4. and门 simuilink_电力电子电路仿真-MATLAB和PSpice应用.PPT
  5. 小体积适用于大小家电LED数显驱动芯片VK1S68C SSOP24,内置RC震荡
  6. 回归分析中R方和调整R方的区别
  7. 《面向基于人工智能的学习健康系统,使用心电图进行人群水平的死亡率预测》阅读笔记
  8. SoC--片上系统概念定义
  9. ENVI图像预处理之辐射定标——以Landsat8为例
  10. 微积分、线性代数、概率论,这里有份超详细的ML数学路线图