MATLAB 毫米波点云进行模糊c聚类(FCM)处理

该文使用模糊c均值聚类算法对包含100个点的7列点云数据进行处理,重点在于前3列的X、Y、Z坐标数据。通过归一化、初始化参数、迭代计算更新隶属度矩阵和聚类中心,实现点云数据的重聚类。最终,基于更新后的隶属度对点云进行三维可视化,展示聚类结果。
摘要由CSDN通过智能技术生成

    100行7列点云数据,前三列分别为X,Y,Z,有10个点簇,利用模糊c均值聚类算法计算隶属度,对点云重新聚类 ,最后画出三维聚类结果。

% 读入数据
load data.mat % 假设点云数据已经存储在data.mat文件中
data = normalize(data(:,1:3)); % 取前三列数据,并归一化处理

% 初始化参数
k = 10; % 聚类数目
m = 2; % 模糊因子
epsilon = 1e-10; % 防止距离为0时出现除数为0的情况

U = rand(100,k); % 初始化隶属度矩阵
U = bsxfun(@rdivide,U,sum(U,2)); % 保证每一行的和为1
C = datasample(data,k,'Replace',false); % 随机选择k个点作为聚类中心向量

% 迭代计算
TOL = 1e-6; % 设定停止条件
maxiter = 100; % 设定最大迭代次数
for iter = 1:maxiter
    % 计算距离
    D = pdist2(data,C).^2 + epsilon; % 采用欧氏距离并添加小正数防止除数为0
    
    % 更新隶属度矩阵U
    U_old = U;
    U = bsxfun(@power,1./D,1/(m-1));
    U = bsxfun(@rdivide,U,sum(U,2));
    
    % 更新聚类中心向量C
    C_old = C;
    C = (U.^m)'*data;
    C = bsxfun(@rdivide,C,sum(U.^m)',2);
    
    % 判断是否达到停止条件
    if norm(C-C_old,'fro')/norm(C_old,'fro') < TOL
        break;
    end
end

% 根据隶属度重新聚类
[~, idx] = max(U, [], 2);

% 可视化结果
figure;
for i = 1:k
    scatter3(X(idx == i, 1), X(idx == i, 2), X(idx == i, 3), '.');
    hold on;
end
grid on;
xlabel('X'); ylabel('Y'); zlabel('Z');
title('Fuzzy C-means Clustering Result');

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值