Clustering Pixels Using K-Means

本文介绍如何使用K-Means算法对图像像素进行聚类处理,通过滑动窗口提取区域特征,并进行聚类分析,实现简单图像的分割。


原文来自我的个人博客:http://www.yuanyong.org/blog/python/clustering-pixels-using-k-means


在前一篇文章K-Means Using Python中,给出了一个用K-Means聚类的Tutorial,这个将K-Means用在具体图像像素聚类中,需要说明的是除了在很简单的图像上,单纯在像素值上应用K-Means给出的结果是毫无意义的。要产生有意义的结果,需要更多复杂的类模型或空间一致性而不是平均像素色彩。这里,我们仅仅在RGB三通道像素值上运用K-Means,关于图像分割问题会在后面的学习过程中给出一些笔记与示例。

这里,我们对两幅简单的图像利用K-Means进行像素聚类。下面代码先载入图像,然后用一个  100×100  的窗口在图像中滑动,在RGB三通道上,分别求窗口所在位置中窗口包含像素值的平均值作为特征,对这些特征利用K-Means进行聚类,然后进行向量量化,关于向量量化的解释及理解,可以参与[1,2],下面是完整的对一幅简单的图像利用K-Means进行像素聚类的完整code:

1 """
2 Function: Illustrate Clustering Pixels Using K-Means
3 Date: 2013-11-01
4 """"
5 from scipy.cluster.vq import *
6 from scipy.misc import imresize
7 from pylab import *
8 import Image
9 steps = 100 # image is divided in steps*steps region
10 infile = 'D:\NutStore\Project\Translation\PCV\pcv_data\data\empire.jpg'
11 im = array(Image.open(infile))
12 dx = im.shape[0/ steps
13 dy = im.shape[1/ steps
14 # compute color features for each region
15 features = []
16 for in range(steps):
17     for in range(steps):
18         = mean(im[x * dx:(x + 1* dx, y * dy:(y + 1* dy, 0])
19         = mean(im[x * dx:(x + 1* dx, y * dy:(y + 1* dy, 1])
20         = mean(im[x * dx:(x + 1* dx, y * dy:(y + 1* dy, 2])
21         features.append([R, G, B])
22 features = array(features, 'f'# make into array
23 # cluster
24 centroids, variance = kmeans(features, 3)
25 code, distance = vq(features, centroids)
26 # create image with cluster labels
27 codeim = code.reshape(steps, steps)
28 codeim = imresize(codeim, im.shape[:2], 'nearest')
29 figure()
30 ax1 = subplot(121)
31 ax1.set_title('Image')
32 axis('off')
33 imshow(im)
34 ax2 = subplot(122)
35 ax2.set_title('Image after clustering')
36 axis('off')
37 imshow(codeim)
38 show()

上面两层for循环实现的就是窗口滑动时,窗口中三通道像素的平均值,并将求得的三通道上的平均值作为feature,后面的过程就是K-Means Using Python中详解的内容,这里不再赘述。下面是像素聚类结果:

再次需要强调的是利用像素聚类的方法只能对一些简单的图像进行分割,对于复杂点的图像,我们可以采用图割的方法,后面会对这方面进行一些分析。

[1] http://www.data-compression.com/vq.shtml

[2] http://blog.youkuaiyun.com/zouxy09/article/details/9153255


【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值