引
由于目前手头处理的事情与图像处理相关,自然少不了滤波、分割、插值等等。这里所做的图像聚类属于一种无监督的图像像素分类,有学习价值。
说明
本次实践针对灰度图像来处理,彩色图像的处理思路与其相同,只是需要分不同的通道,代码大部分参数采用键盘输入,方便调试。
结果展示
先来看看结果,直观感受一下聚类的“魅力”。
——第一组——
下图为迭代周期 = 20, 分类数 = 8
的结果
下图为迭代周期 = 20, 分类数 = 4
的结果
下图为迭代周期 = 20, 分类数 = 2
的结果
——第二组——
下图为迭代周期 = 20, 分类数 = 8
的结果
下图为迭代周期 = 20, 分类数 = 4
的结果
下图为迭代周期 = 20, 分类数 = 2
的结果
结果小结
怎么样,看到聚类的结果,有没有迸发出一点新的想法?
关键点分析
keyValueList
keyValueList
为一个长度为分类数的存储空间,其元素从低到高代表了图像像素各个类的平均值。
迭代过程
- 聚类的迭代过程就是遍历每个像素点,并且将每个像素点分别与
keyValueList
的每个元素做差,这个差的绝对值越小,说明该像素点离该类越近。遂将该元素归到离其最近的类。- 遍历完所有的像素点后,对每一类的像素点求其平均值,并以该值更新对应的
keyValueList
中的元素,并完成一轮迭代。- 最终会获得一个与原图大小相同的
flag
矩阵,矩阵的每个元素对应原图中像素所在类别。- 将该
flag
矩阵输出,则得到聚类得到的分类结果。
代码(需下载)
这里将代码挂到下载区,并附链接图像聚类Python代码。