图像量化法——kmeans算法

总述

它认为一群离散的点,可以用若干个具有代表性的点来表示,这几个具有代表性的点被称为基准点。针对于这群离散的点中的任意一点找出与其距离最近的基准点,那么该点就可以用这个最近的基准点表示。那么用这个基准点表示的离散的点就组成了一个集合,这样的集合被称为聚类,因此可知有多少个基准点就有多少个聚类。该算法可以把杂乱无章的点分成若干个类别,即,把数量庞大的信息,转换成可以有效控制的信息。

效果

图像量化法——kmeans算法_第1张图片
原图

图像量化法——kmeans算法_第2张图片
k=2.png

图像量化法——kmeans算法_第3张图片
k=4.png

图像量化法——kmeans算法_第4张图片
k=8.png

图像量化法——kmeans算法_第5张图片
k=16.png

图像量化法——kmeans算法_第6张图片
k=32.png

图像量化法——kmeans算法_第7张图片
k=64.png

该算法的关键点

在于基准点的选取,这里采用的是在已有的数据中随机选择k个点作为基准点。具体为图像的数据是一个数组,你可以随机选择数组中某个元素,直到不重复的基准点的数量达到k为止。但是因为是随机选取所以最后得到的结果是不稳定的,可是比较快。
该方法的意义在于能够体现kmeans算法的基本思想而已。
关于基准点的选取网上有很多方法介绍,不过感觉想明白,还是需要一点功力的。

相似程度具体是啥

其实就是某点与某基准点的欧几里得距离,欧几里得距离的特殊情况就是两点间距离公式了。最相似就是说这两点的欧几里得距离最短。

大致过程

遍历整个图像的原始数据,找出与某点最相似的基准点,然后把基准点的数据赋值给该点,直到所有原始数据遍历完毕为止。
最后再用更改过后的数据生成新的图像。

源代码

这是用Objective-C编写,用XCode运行的iOS工程,点此下载。

多谢捧场

如果您觉得我的文章有价值,那么赏脸打赏一个,鄙人感激不尽。不过,不打赏看看也是好的,如果有不对的地方,还请您多多指正。


你可能感兴趣的:(图像量化法——kmeans算法)