Clustering Pixels Using K-Means
来源:互联网 发布:java三层架构实例 编辑:程序博客网 时间:2024/05/17 22:41
原文来自我的个人博客: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进行像素聚类。下面代码先载入图像,然后用一个
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
x
in
range
(steps):
17
for
y
in
range
(steps):
18
R
=
mean(im[x
*
dx:(x
+
1
)
*
dx, y
*
dy:(y
+
1
)
*
dy,
0
])
19
G
=
mean(im[x
*
dx:(x
+
1
)
*
dx, y
*
dy:(y
+
1
)
*
dy,
1
])
20
B
=
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.csdn.net/zouxy09/article/details/9153255
- Clustering Pixels Using K-Means
- 聚类图像像素 Clustering Pixels Using K-Means
- Geometry clustering using K-Means algorithm
- Clustering text documents using k-means
- Clustering (1): k-means
- K-Means Clustering
- k-means Clustering
- Clustering (1): k-means
- K-Means Clustering算法
- Understanding K-Means Clustering
- K-Means clustering 简介
- K-Means聚类 K-Means Clustering
- K-means clustering 介绍论文
- 漫谈 Clustering (1): k-means
- MapReduce and K-Means Clustering
- 漫谈 Clustering (1): k-means
- 漫谈 Clustering (1): k-means
- 漫谈 Clustering (1): k-means
- Android学习篇章20-文件IO流
- WARNING: at net/sched/sch_generic.c:226 dev_watchdog+0x144/0x22c()
- Android 启动流程分析(一)
- Tag功能介绍—我们为什么打Tag?
- Android学习篇章21-Sharedprefrence
- Clustering Pixels Using K-Means
- C/C++中如何写长串(字符数组的拼接)?
- Java反射初步
- DXLib 主页,简单翻译(我其实看不懂,都是瞎掰的)
- 单片机LY5A-L1B开发板笔记(1)
- MySQL云数据库服务的架构探索
- servlet 重定向和转发总结
- JSP——EL表达式学习笔记
- 6-UDP协议