一,k-means 聚类
k-means 聚类算法是一种非常简单实用的图像分割方法。它属于无监督机器学习算法。通常的做法是按照一定的方法度量样本间的相似度,然后通过不断的迭代来更新聚类的中心,当中心不再变动时,说明图像分割完成。具体的方法如下:
1.随机选择K个点作为聚类的中心点(本示例选择的两个点)
2.计算每个点到两个中心点的距离,并将每个像素点分配给距离其最近的中心点
3.计算每个族群的均值位置作为新的聚类中心点
4.重复上述步骤,直到中心点不再变化
聚类算法的缺点:
1.在算法开始时,随机选择的中心点不同,可能导致最终的结果不同(如下图所示),同样是选择三个中心点,由于开始随机选取的点不同,造成最终结果不同
2.对于分割区域的大小差异较大的图像,分割效果较差(如下图所示)
3.对于非球状的图像,分割效果较差(如下图所示)
二,分层聚类(Hierarchical Clustering)
Hierarchical Clustering 有两种方式,一种叫做agglomerative clustering,这种方法的核心思想为每个像素为认为是一类,通过迭代将最近的两个类别merged到一起形成新的类;另一种方法叫做divisive clustering,这种方法的核心思想为先将整个图像当成一类,然后通过迭代将整个图像逐渐分割成不同的类。Agglomerative clustering 的基本步骤为:
1.将每个像素点当成一类
2.计算距离矩阵,即所有像素点两点之间的距离。假设有A, B, C, D, E 5个点(如下图)
3.通过迭代,不断的merge距离最近的两个群组,直到最终全部合并成一个群组为止
重点:算法的核心在于计算两个群组的最短距离的方式不同,最终所分成的群组的结果也会不同,常用的计算两个群组的最短距离的方式有如下三种:
single-link clustering: 两群组间的最短距离为群组间的最相邻点的距离
complete-link clustering: 两群组间的最短距离为群组间最远点的距离
group-link clustering: 两群组间的最短距离为群组间所有点的相互距离的平均值。如,两群组分别有m 和 n个元素,则相互间可以计算出 m *n个距离,将这些距离相加再除以m*n 则是他们两个群组的距离
centroid clustering: 两群组间的距离为先求出每个群组内部的平均距离,然后再计算群组间的距离
Reference:
https://blog.csdn.net/M1M1M16/article/details/79415871