模糊C均值聚类算法---图像分割(python)

本文介绍了模糊C-Means聚类算法,它比k-means提供更灵活的聚类结果,适用于数据集中的对象不易划分的情况。文章详细阐述了算法原理,展示了流程图,并提供了Python代码实现,包括初始化聚类中心、计算隶属度、更新聚类中心及损失函数的计算,旨在应用于图像分割领域。
摘要由CSDN通过智能技术生成

Fuzzy C-Means算法

    模糊c均值聚类融合了模糊理论的精髓。相较于k-means的硬聚类,模糊c提供了更加灵活的聚类结果。因为大部分情况下,数据集中的对象不能划分成为明显分离的簇,指派一个对象到一个特定的簇有些生硬,也可能会出错。故,对每个对象和每个簇赋予一个权值,指明对象属于该簇的程度。当然,基于概率的方法也可以给出这样的权值,但是有时候我们很难确定一个合适的统计模型,因此使用具有自然地、非概率特性的模糊c均值就是一个比较好的选择。

算法原理

在这里插入图片描述
在这里插入图片描述

流程图

在这里插入图片描述

代码实现

  • 初始聚类中心
 	c = 4  # 聚类数目c
    b = 2  # b>l,是一个可以控制聚类结果的模糊程度的常数。

    m=np.array([[0, 0, 0,],[0, 0,  0,], [0, 0, 0,], [0, 0, 0, ]]).astype(float)

  • 计算隶属度
while(x>0.001):
        for row in range(h):
            for col in range(w):
                temp=0
                for i in range(c):
                    # 避免分母会为0,需要判断
                    if paradigm(img[row][col],m[i])!=0:
                        temp= temp + pow(1/paradigm(img[row][col],m[i]),1/(b - 1))
                    else:
                        temp = temp + pow(1/(10e-10),1/(b - 1))
                        
                for j in range(c):
                    # 避免分母会为0,需要判断
                    if paradigm(img[row][col],m[j]) != 0:
                        t=math.pow(1/paradigm(img[row][col],m[j]),1/(b-1))
                    else:
                        t=math.pow(1/(10e-10),1/(b-1))
                    # 更新隶属度表Mu
                    mu[row][col][j]=t/temp
  • 更新聚类中心
 # 按照公式,将m的分子分母部分分别计算出来
  t=math.pow(mu[row][col][j],b)
  for i in range(ch):
      mfenzi[j][i]=mfenzi[j][i] + (t*img[row][col]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值