请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册
查看: 7660|回复: 3

K均值(图像)聚类分析

[复制链接]

1278

主题

1504

帖子

90

金钱

管理员

Rank: 9Rank: 9Rank: 9

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

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

K均值(图像)聚类分析:
  1. % K均值聚类算法
  2. clc,clear,close all;
  3. warning off;
  4. I_rgb=imread('ysw_image.jpg');
  5. % I_rgb=im2double(I_rgb);   % 双精度
  6. I_rgb = double(I_rgb);   % 双精度
  7. % I_rgb = imresize(I_rgb, [128,256]);  % 改变图像的大小
  8. I_rgb = imresize(I_rgb, [64,128]);  % 改变图像的大小
  9. [M,N] = size(I_rgb(:,:,1));
  10. % I_rgb = rgb2gray(I_rgb);  % 彩色图像转化为灰度图像
  11. if size(I_rgb,3)==1
  12.    ClusterData(:,1) = I_rgb(:);
  13. else
  14.    ClusterData(:,1) = reshape( I_rgb(:,:,1), [],1);  % R
  15.    ClusterData(:,2) = reshape( I_rgb(:,:,2), [],1);  % G
  16.    ClusterData(:,3) = reshape( I_rgb(:,:,3), [],1);  % B
  17. end

  18. % 分类数
  19. [len, depth]= size(ClusterData);
  20. Kc = 4;   % 聚类中心个数
  21. % 初始化中心
  22. % index = ceil( unifrnd(1,len, 1, Kc) );   % 均匀分布
  23. index = 1:Kc;
  24. center = ClusterData(index,:);
  25. center_new = center;   % 初始化新的中心

  26. % maim loop
  27. maxgen = 1e3;  % 最大迭代次数
  28. for i=1:maxgen
  29.      % 计算 每一个待分类的数据隶属于的中心编号
  30.     [center_minDist,center_index] = center_nearest(center,ClusterData);
  31.     for j=1:Kc
  32.         index = find(center_index==j);
  33.         center_new(j,:) = mean( ClusterData(index,:) ,1 );
  34.     end
  35.     error = norm( center_new-center, 2 );  % 相连两次中心点的距离值
  36.     center = center_new;   % 更新中心
  37.     if error<0.000001
  38.         fprintf('\n');
  39.         disp(['收敛迭代次数:', num2str(i)])
  40.         disp( '聚类中心为:' )
  41.         disp( num2str(center) )
  42.         break;
  43.     end
  44. end
复制代码
L2距离计算:
  1. function [center_minDist,center_index] = center_nearest(center,ClusterData)
  2. for i=1:size(ClusterData)    % i个样本
  3.     for j =1:size(center,1)  % j个中心
  4.         dist(j) = norm( ClusterData(i,:) - center(j,:), 2);
  5.     end
  6.     [center_minDist(i), center_index(i)] = min(dist);
  7. end
复制代码

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




算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

1278

主题

1504

帖子

90

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22549
 楼主| 发表于 2018-4-17 22:24:55 | 显示全部楼层
改进一下:
  1. maxgen = 1e3;  % 最大迭代次数
  2. for i=1:maxgen
  3.      % 计算 每一个待分类的数据隶属于的中心编号
  4.     [center_minDist, center_index] = center_nearest(center,ClusterData);
  5.     for j=1:Kc
  6.         index = find(center_index==j);
  7.         if(isempty(index))
  8.             center_new(j,:) = center(j,:);
  9.         else
  10.             center_new(j,:) = mean( ClusterData(index,:) ,1 );
  11.         end
  12.     end
  13.     error = norm( center_new-center, 2 );  % 相连两次中心点的距离值
  14.     center = center_new;   % 更新中心
  15.     if error<1e-3
  16.         break;
  17.     end
  18. end
复制代码

算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

0

主题

1

帖子

3

金钱

新手上路

Rank: 1

积分
4
发表于 2018-8-15 18:12:02 | 显示全部楼层
您好!这是我的机器码,FC72E003CE31BA7C-0-FF3AF712D936E17C
回复 支持 反对

使用道具 举报

1278

主题

1504

帖子

90

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22549
 楼主| 发表于 2018-8-15 23:02:06 | 显示全部楼层
Mistc 发表于 2018-8-15 18:12
您好!这是我的机器码,FC72E003CE31BA7C-0-FF3AF712D936E17C

具体联系管理员QQ   3283892722
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-3-28 16:53 , Processed in 0.213602 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表