博客
关于我
图像分割系列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/

你可能感兴趣的文章
python3实现socket通信
查看>>
Python关于numpy.transpose函数详细解析附代码
查看>>
Python3导入自定义模块的3种方式
查看>>
python3打开txt文件_使用Python 3从文本文件读取句子并添加到列表中
查看>>
python3爬虫抓取智联招聘职位信息代码
查看>>
Python3爬虫数据入数据库---把爬取到的数据存到数据库,带数据库去重功能
查看>>
python3的 pymysql把mysqldb库取代了,让python 3支持mysqldb的解决方法
查看>>
Python3笔记——IDE的选择
查看>>
python3简单使用requests 用户代理,cookie池
查看>>
Python3组播通信编程实现教程(发送者+接收者)
查看>>
Python3编写网络爬虫10-数据存储方式三-CSV文件存储
查看>>
python3读取redis返回数据带有'b'的问题
查看>>
Python3连接MySQL
查看>>
Python关于isinstance函数的解析 | 附Demo(全)
查看>>
Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)
查看>>
python4.0 gil_Python 并发编程系列--1、浅谈GIL历史及对多线程的影响
查看>>
python60行绘图程序_天底下最简单的QT画图板,就一个类,60行代码
查看>>
Python: AES加密与解密
查看>>
Python: Range() 最大尺寸;动态的还是静态的?
查看>>
Python: Windows下用 multiprocessing 的深坑
查看>>