Halcom 发表于 2017-5-27 21:44:18

K均值(图像)聚类分析

百度网盘视频链接:
视频链接:http://pan.baidu.com/s/1jI5MvIY
录制的视频是算法底层原理讲解,底层代码实现,方便大家真正掌握算法实质,开发出更加出色的算法。录制视频的初衷是:避免读者朋友利用大把时间学习已有常见算法,本系列视频旨在让读者朋友快速深入了解这些常见算法原理,有更多的时间去研究更加高大上算法(价值)。

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

K均值(图像)聚类分析:
% K均值聚类算法
clc,clear,close all;
warning off;
I_rgb=imread('ysw_image.jpg');
% I_rgb=im2double(I_rgb);   % 双精度
I_rgb = double(I_rgb);   % 双精度
% I_rgb = imresize(I_rgb, );% 改变图像的大小
I_rgb = imresize(I_rgb, );% 改变图像的大小
= size(I_rgb(:,:,1));
% I_rgb = rgb2gray(I_rgb);% 彩色图像转化为灰度图像
if size(I_rgb,3)==1
   ClusterData(:,1) = I_rgb(:);
else
   ClusterData(:,1) = reshape( I_rgb(:,:,1), [],1);% R
   ClusterData(:,2) = reshape( I_rgb(:,:,2), [],1);% G
   ClusterData(:,3) = reshape( I_rgb(:,:,3), [],1);% B
end

% 分类数
= size(ClusterData);
Kc = 4;   % 聚类中心个数
% 初始化中心
% index = ceil( unifrnd(1,len, 1, Kc) );   % 均匀分布
index = 1:Kc;
center = ClusterData(index,:);
center_new = center;   % 初始化新的中心

% maim loop
maxgen = 1e3;% 最大迭代次数
for i=1:maxgen
   % 计算 每一个待分类的数据隶属于的中心编号
    = center_nearest(center,ClusterData);
    for j=1:Kc
      index = find(center_index==j);
      center_new(j,:) = mean( ClusterData(index,:) ,1 );
    end
    error = norm( center_new-center, 2 );% 相连两次中心点的距离值
    center = center_new;   % 更新中心
    if error<0.000001
      fprintf('\n');
      disp(['收敛迭代次数:', num2str(i)])
      disp( '聚类中心为:' )
      disp( num2str(center) )
      break;
    end
endL2距离计算:
function = center_nearest(center,ClusterData)
for i=1:size(ClusterData)    % i个样本
    for j =1:size(center,1)% j个中心
      dist(j) = norm( ClusterData(i,:) - center(j,:), 2);
    end
    = min(dist);
end

参考链接:http://halcom.cn/forum.php?mod=v ... ge=1&extra=#pid1617




Halcom 发表于 2018-4-17 22:24:55

改进一下:
maxgen = 1e3;% 最大迭代次数
for i=1:maxgen
   % 计算 每一个待分类的数据隶属于的中心编号
    = center_nearest(center,ClusterData);
    for j=1:Kc
      index = find(center_index==j);
      if(isempty(index))
            center_new(j,:) = center(j,:);
      else
            center_new(j,:) = mean( ClusterData(index,:) ,1 );
      end
    end
    error = norm( center_new-center, 2 );% 相连两次中心点的距离值
    center = center_new;   % 更新中心
    if error<1e-3
      break;
    end
end

Mistc 发表于 2018-8-15 18:12:02

您好!这是我的机器码,FC72E003CE31BA7C-0-FF3AF712D936E17C

Halcom 发表于 2018-8-15 23:02:06

Mistc 发表于 2018-8-15 18:12
您好!这是我的机器码,FC72E003CE31BA7C-0-FF3AF712D936E17C

具体联系管理员QQ   3283892722
页: [1]
查看完整版本: K均值(图像)聚类分析