Kmeans聚类算法是十分常用的聚类算法,给定聚类的数目N,Kmeans会自动在样本数据中寻找N个质心,从而将样本数据分为N个类别。下面简要介绍Kmeans聚类原理,并附上自己写的Kmeans聚类算法实现。

一、Kmeans原理

  1. 输入:一组数据data,设定需要聚类的类别数目ClusterCnt,设定迭代次数IterCnt,以及迭代截止精度eps

      输出:数据data对应的标签label,每一个数据都会对应一个label(范围0 ~ ClusterCnt-1),表示该数据属于哪一类。

  2. 首先,选取初始ClusterCnt个质心位置,选取初始质心位置很重要。一般原则是这ClusterCnt个质心在数值上相互差别越远越好(距离越大越好)。偷懒的做法就是随机选取,或者是选取前面ClusterCnt个数据作为初始质心。但是前提是初始质心数值不能存在重复或者相等的情况。

  3. 开始聚类,这是一个迭代过程。先针对每一个数据,计算其与每个质心之间的距离(差别),选取距离最小的对应的质心,将其归为一类(设置为同一个标签值),依次遍历所有数据。这样第一次迭代后,所有数据都有一个标签值。

  4. 计算新的质心。每一次迭代完成后,计算每个类别中数据中的均值,将此均值作为新的质心,进行下一轮的迭代。这样每一轮迭代后都会重新计算依次质心。直到满足5中的条件。

  5. 每次迭代后,计算每个类别中数值的方差值,然后求出所有类别方差值得均值var,将var作为一个判别准则,当本次var与上次var之间的变化小于eps时,或者迭代次数大于iterCnt时,停止迭代,聚类完成。

  6. 输出数据的标签。相同标签值得被kmeans聚为一类,这样所有数据就被聚类为设定的ClusterCnt个类别。

二、图像中的应用

  简单的将kmeans算法应用于图像中像素点的分类,每个像素点的RGB值作为输入数据,计算像素点与质心之间的距离,不断迭代,直到所有像素点都有一个标签值。根据标签图像将原图像中同一类别设定相同颜色,不同类别设定不同颜色。可用于图像分割等。

  OpenCV中也集成有Kmeans算法的API,如下图,其选取初始质心有三种flag可以设置,随机选取、某种算法选取、用户设定。具体使用方法请参考OpenCV文档。

  

三、示例

原图                                                                     kmeans聚类 (10类)

  

四、代码

  见我的码云code:https://gitee.com/rxdj/myKmeans.git

图像处理中kmeans聚类算法C++实现的更多相关文章

  1. Kmeans聚类算法原理与实现

    Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...

  2. 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

  3. 视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析

    原文地址:http://www.cnblogs.com/zjiaxing/p/5548265.html 在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/d ...

  4. 视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析(1)

    在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/dorian3d/DBoW2,而bag of words 又运用了数据挖掘的K-means聚类算法,笔者只 ...

  5. Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解

        Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解 在Hadoop分布式环境下实现K-Means聚类算法的伪代码如下: 输入:参数0--存储样本数据的文本文件inpu ...

  6. OpenCV图像处理中“投影技术”的使用

           本文区分"问题引出"."概念抽象"."算法实现"三个部分由表及里具体讲解OpenCV图像处理中"投影技术" ...

  7. K-Means 聚类算法

    K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...

  8. k-means聚类算法python实现

    K-means聚类算法 算法优缺点: 优点:容易实现缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他 ...

  9. K-Means 聚类算法原理分析与代码实现

    前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...

随机推荐

  1. Python:每日一题002

    题目: 企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万 ...

  2. unable to bind listening socket for address '127.0.0.1:9090': Address already in use (98)

    unable to bind listening socket for address '127.0.0.1:9090': Address already in use (98) php-fpm 启动 ...

  3. maven解决omitted for duplicate(依赖冲突)

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  4. 2019.02.26 bzoj4311: 向量(线段树分治+凸包)

    传送门 题意: 支持插入一个向量,删去某一个现有的向量,查询现有的所有向量与给出的一个向量的点积的最大值. 思路: 考虑线段树分治. 先对于每个向量处理出其有效时间放到线段树上面,然后考虑查询:对于两 ...

  5. linux服务器时间同步失败解决方法

    linux服务器时间同步失败解决方法 1.为什么会时间不同步: ①计算机的时间是根据电脑晶振以固定频率震荡而产生的,由于晶振的不同或者老化,会导致电脑时间积累误差的产 (什么是电脑晶振:http:// ...

  6. .NET Core微服务之路:文章系列和内容索引汇总 (v0.52)

    微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑,包含微服务核心组件如 1. Eureka:实现服务注册与发现. 2. ...

  7. ASP.NET Core 请求/查询/响应参数格式转换(下划线命名)

    业务场景: 在 ASP.NET Core 项目中,所有的代码都是骆驼命名,比如userName, UserName,但对于 WebApi 项目来说,因为业务需要,一些请求.查询和响应参数的格式需要转换 ...

  8. 项目Alpha冲刺(团队3/10)

    项目Alpha冲刺(团队3/10) 团队名称: 云打印 作业要求: 项目Alpha冲刺(团队) 作业目标: 完成项目Alpha版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 ...

  9. Linux 查看IP

    UBuntu 系统下 按Ctrl+Alt+T 唤出终端 在终端输入: ifconfig 命令 点击回车 就可以看到自己电脑在局域网的IP地址了 图中第二行 inet 地址:192.168.1.101 ...

  10. PICE(5):MongoDBStreaming - gRPC -MGO Service

    我在前面提到过MongoDB不支持像SQL般字符式的操作指令,所以我们必须对所有的MongoDB操作指令建立protobuf类型才能支持MongoDB指令的序列化.在对上一篇博文里我们把MongoDB ...