FCM和Threshold

一、FCM

模糊聚类是目前知识发现以及模式识别等诸多领域中的重要研究分支之一。

模糊C–均值聚类(FCM)是目前比较流行的一种聚类方法。该方法使用了在欧几里得空间确定数据点的几何贴近度的概念,它将这些数据分配到不同的聚类,然后确定这些聚类之间的距离。

FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。

模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则是一种柔性的模糊划分。

情景:
假设现在有一群人,要将他们自动分成大人和小孩两类,以身高作为分类标准。

(若身高大于160cm为大人,小于160cm为小孩)

现有一人身高为100cm,那么根据上述标准,不难判断,他会被划分到小孩一组。但是如果他的身高为159cm,该如何划分呢?

IDEA1:无论如何159cm总是小于160cm,应该被分到小孩组。
IDEA2:159cm很接近160cm,更偏离小孩组,应该被分到大人组。

以上两种说法体现了普通C均值算法(HCM)和模糊C均值算法(FCM)的差异:
普通C均值算法在分类时有一个硬性标准,根据该标准划分,分类结果非此即彼。(IDEA1)
模糊C均值算法更看重隶属度,即更接近于哪一方,隶属度越高,其相似度越高。(IDEA2)

由以上叙述不难判断,用模糊C均值算法来进行组类划分会使结果更加准确!

二、K-Means

与FCM类似,K-Means算法是一种无监督的学习算法,是划分聚类算法的代表算法。采用欧式距离来衡量数据对象之间的相似度,相似度与数据对象间的距离成反比,相似度越大,距离越小。

K-Means算法是一个不断迭代的过程,其核心思想是:

(1)从包含个数据点的数据集中随机选择个数据点作为聚类中心

(2)对于数据集中的数据点,计算与个中心点的距离,使用的距离度量方法是欧氏距离,即直线距离。将数据点与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一簇;

(3)计算每一簇中数据点的平均值,如果数据集为一幅图像,那么每一簇中数据点的平均值就是每一簇中像素点数值和的平均值,将该簇所关联的中心点移到平均值的位置

(4)进行下一次迭代,直至中心点不再变化或达到最大迭代次数停止迭代。

K-Means算法的流程图如下图所示:

FCM和Threshold

FCM和K-Means比较:

FCM是一种基于模糊集合为基础的聚类方法,它是以隶属度来确定每个数据点从属于某个中心。Kmeans这类算法称为硬聚类,而FCM则称为软聚类,是传统硬聚类的一种改进。

为什么叫软跟硬,因为FCM在聚类的时候,会计算每个样本点到中心的隶属度这个隶属度是一个0~100%的数值,而硬聚类则只有0%和100%。

FCM通过这个隶属度可以使我们更加直观的了解一个数据点到中心的可信度
 

三、Threshold

函数threshold是对单通道的灰度图像进行阙值处理的,剔除图像像素值高于一定值或者低于一定值的像素点。

Threshold,译为阈值 。什么叫阈值呢?通俗点说,就是分界线。就像我们平时考试的时候,会以60分作为一个阈值,超过60分的,会认为是及格,低于60分的就是不及格。这个60分就是阈值,分界值。用这个函数,我们可以令图像灰度大于阈值的,为一个值,低于阈值的,为另一个值。这就可以实现图像的二值化。

如果你细想上面那句话,会发现提到了灰度。因为在使用Threshold的时候,需要使用灰度图像。如果是RGB图像,3个通道上都有值,这个时候,的确不符合Threshold的设计初衷。
 

 double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );

      第一个参数为输入的图像,Mat类型的即可。

      第二个参数为输出图像,且和输入图像有同等大小和类型。

      第三个参数为设定阙值的具体值。

      第四个参数maxval是第五个参数类型为CV_THRESH_BINARY和CV_THRESH_BINARY_INV时的最大值。

      第五个参数是确定生成阙值图像的方法,有以下几种:

      1、CV_THRESH_BINARY:dst(x,y)={ maxval(第四个参数值)if(src(x,y)>thresh) ,否则为0}

      2、CV_THRESH_BINARY_INV:  dst(x,y)={ 0 if(src(x,y)>thresh) ,否则为maxval} 

      3、CV_THRESH_TRUNC :            dst(x,y)={ thresh if(src(x,y)>thresh) ,否则为src(x,y)} 

      4、CV_THRESH_TOZERO:           dst(x,y)={ src(x,y) if(src(x,y)>thresh) ,否则为0} 

      5、CV_THRESH_TOZERO_INV:   dst(x,y)={ 0 if(src(x,y)>thresh) ,否则为src(x,y) } 
 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年6月8日 上午11:25
下一篇 2022年6月8日 上午11:27

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!