博客
关于我
图像分割系列3_KMeans对图像进行分割
阅读量:692 次
发布时间:2019-03-17

本文共 939 字,大约阅读时间需要 3 分钟。

KMeans图像分割是一种常见的无监督学习技术,可以用来将一张图像分割成多个具有同质性的区域。以下将详细介绍基于OpenCV实现的KMeans图像分割的方法。

首先,我们需要初始化一些参数。颜色表colorTab包含了一些常见的颜色,可以用来对图像进行分类。colorTab数组中的每个元素代表一种颜色,BGR色空间模式。需要注意的是,这里的颜色与图片中的实际颜色有一定的差距,需要根据具体需求进行调整。

接下来,我们获取图像的尺寸。宽度由cols决定,高度由rows决定, dims则表示图像的通道数。为了实现KMeans,我们需要先创建一个包含所有像素的样本点矩阵points。每个像素都会映射为一个点,点的维度和通道数一致。

初始时,我们还需要创建一个用于存储样本标签的矩阵labels以及每个簇的中心点矩阵centers。label的值表示每个像素属于哪个簇,中心点的数目由clusterCount决定。在这个实例中,clusterCount设置为4,这是最常见的簇的数量。

为了获得每个像素的坐标,我们遍历整个图像。在这个循环中,我们获取每个像素的BGR颜色值,并将其存储在points矩阵中。需要注意的是,points矩阵的 Storage Order 是按行优先的顺序存储的,先存储上边缘,然后是下边缘。

完成样本点矩阵的初始化之后,我们可以调用KMeans算法。在这里,TermCriteria用于设置终止条件。第一个参数设置为EPS和COUNT,意味着算法在一定的次数(10次)和终止误差(0.1)下停止迭代。第二个参数设置为3,表示最多运行3次KMeans算法。KMEANS_PP_CENTERS参数指定了算法返回中心点的方式。由于我们已经预先定义了centers矩阵,这里设置为KMEANS_PP_CENTERS以确保算法返回预定义的中心点。

得到标签之后,我们需要将这些标签映射到颜色表中。具体来说,我们为每个像素获取对应的标签,选择颜色表中的相应颜色,并将这个颜色赋给对应位置的像素。通过这种方式,可以将整个图像按颜色分割成不同的区域。

最后,我们可以 显示生成的图像,检查KMeans算法的性能。为了更好地调试和观察结果,可以设置成自动调节窗口大小。

转载地址:http://qzuhz.baihongyu.com/

你可能感兴趣的文章
python 学习 面向对象编程
查看>>
Python 学习日记第三篇 -- 字典
查看>>
Python 学习笔记(一)Data type
查看>>
python 安装echarts
查看>>
python 安装opencv及问题解决
查看>>
Python 安装程序:“写入文件 C:\Python27\pythonw.exe 时出错“
查看>>
Python 安装避坑指南:从入门到进阶
查看>>
Python 安装配置详解
查看>>
Python 常见的错误类型和继承关系
查看>>
python 常量_零基础学Python系列之一:Python的变量与常量
查看>>
Python 并发编程
查看>>
python 微信扫码登录_python实现微信第三方网站扫码登录(Django)
查看>>
Python 快速下载依赖
查看>>
python实现非参数统计的Cochran检验 (附完整源码)
查看>>
Python 手写数字识别-3-sklearn中的几种算法
查看>>
Python 打开文件注意事项
查看>>
python 批量修改文件名_python windows下批量修改文件名
查看>>
Python 抓取网页乱码问题 以及EXCEL乱码
查看>>
python 抓取网页内容
查看>>
python 按照当前日期创建文件
查看>>