24小时热门版块排行榜    

查看: 1747  |  回复: 10
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

xiyue6911

新虫 (小有名气)


已领完
基于Kmeans的图像聚类算法
领取红包 (小木虫手机app专属红包)

扫一扫,下载小木虫客户端

使用方法:直接在matlab中运行,但注意更改图片路径名;
主要分三步:
1,初始化聚类中心,我使用K等分点做的;
2,随机性采样,出于效率的考虑;
3,剩余点划分,将未采集到的图像剩余点划分到簇类中。
clc;clear all;close all;
%% Kmeans聚类图像
K = 4;
im = imread('penguin.jpg');
im = imresize(im,[321,321],'nearest');
[R c lmd] = size(im);
elenum = numel(im(:,:,1));
total = [1:elenum];%总体;
dt = 0.1;%聚类中心迭代阈值;
for i = 1:size(im,lmd) %Cij表示第i波段成像,第j个
    min_c = min(min(im(:,:,i)));
    max_c = max(max(im(:,:,i)));
    for k = 1:K
        C(i,k) = min_c + k*((max_c - min_c)/(K + 1));
    end
end
C = double(C);
C_orgi = C;%初始聚类中心;
%修改图像的存储模式
points(elenum) = struct('r',0,'g',0,'b',0,'cluster',0);
for i = 1:R
    for j = 1:c
        points((j-1)*R + i).r = im(i,j,1);
        points((j-1)*R + i).g = im(i,j,2);
        points((j-1)*R + i).b = im(i,j,3);
        points((j-1)*R + i).cluster = 0;
    end
end
smplrate = 1/10000;
smplseq = sort(randperm(elenum,ceil(elenum*smplrate)),'ascend');%随机性采样M*N个图像样本点
cluster(K,100) =  struct('r',1,'c',1,'data',points(1));%存储簇类每行存储该簇类的样本点
counter(K) = 0;%记录每个簇类的样本点个数;
totalnum = 100;%聚类迭代最大次数;
for iteration = 1:totalnum
for i = smplseq
    for j = 1:K
        ptvalue(1,1) = points(i).r;
        ptvalue(2,1) = points(i).g;
        ptvalue(3,1) = points(i).b;
        distclust(j) = norm(double(ptvalue) - double(C(:,j)));%存储样本点到聚类的距离;
    end
    clunum = find(distclust == min(distclust));%样本点距离聚类中心最小的簇类编号;
    points(i).cluster = clunum;%标记该样本点类型;
    counter(clunum) = counter(clunum) + 1;%样本计数增加一个
    cluster(clunum,counter(clunum)).r = mod(i,R);
    cluster(clunum,counter(clunum)).c = floor(i/R)+1;
    cluster(clunum,counter(clunum)).data = points(i);
end
%更新每个聚类中心的
for i = 1:K
    sum = repmat(double(0),[3,1]);
    for j = 1:counter(i)
        ptvalue(1,1) = cluster(i,j).data.r;
        ptvalue(2,1) = cluster(i,j).data.g;
        ptvalue(3,1) = cluster(i,j).data.b;
        sum = sum + double(ptvalue);
    end
    if  i == 1
        C_new = sum/counter(i);
    else
        C_new = cat(2,C_new,sum/counter(i));
    end
end
    if norm(abs(C-C_new)) < dt
        break;
    end
C = C_new;
end
% 参数显示;
%disp('随机样本个数'),disp(size(smplseq,2));disp('初始聚类中心:');disp(C_orgi);disp('Kmeans 聚类新中心');disp(C);disp('聚类迭代次数');disp(iteration);
smpldiff = setdiff(total,smplseq);
for i = smpldiff
    for j = 1:K
        ptvalue(1,1) = points(i).r;
        ptvalue(2,1) = points(i).g;
        ptvalue(3,1) = points(i).b;
        distclust(j) = norm(double(ptvalue) - double(C_new(:,j)));%存储样本点到聚类的距离;
    end
    clunum = find(distclust == min(distclust));%样本点距离聚类中心最小的簇类编号;
    points(i).cluster = clunum;%标记该样本点类型;
    counter(clunum) = counter(clunum) + 1;%样本计数增加一个
    cluster(clunum,counter(clunum)).r = mod(i,R);
    cluster(clunum,counter(clunum)).c = floor(i/R)+1;
    cluster(clunum,counter(clunum)).data = points(i);
end
clusmap = zeros(R,c);
count = 0;
for i = 1:numel(points)
    r = mod((i-1),R)+1;
    c = ceil(i/R);%一维索引转换为二维索引,按列
    if points(i).cluster~=0
        clusmap(c,r) = points(i).cluster;
        count = count + 1;
    end
end
clusmap = clusmap';
stats = regionprops(clusmap);
imshow(clusmap,[]);
回复此楼

» 收录本帖的淘贴专辑推荐

国自科基金标书 科研资料 source 软件控

» 猜你喜欢

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiyue6911

新虫 (小有名气)


引用回帖:
8楼: Originally posted by wake_up at 2015-10-26 13:13:19
Matlab自带的Kmeans支持并行计算, 快

%% Kmeans聚类图像;
im = imread('penguin.jpg');
im = imresize(im,[256,256]);
im_new = size(im(:,:,1));
im_r = im(:,:,1);im_r = im_r(;
im_g = im(:,:,2);im_g = im_g(;
im_b = im(:,:,3);im_b = im_b(;
datas = double([im_r im_g im_b]);
opts = statset('Display','final');
[idx,ctrs] = kmeans(datas,4,'Distance','sqEuclidean','Options',opts);
im_new = reshape(idx,[256 256]);

与我写的满足一样的功能,使用matlab就是快,还是谢谢
10楼2015-10-26 22:10:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 11 个回答

青青呀呀

新虫 (正式写手)



小木虫: 金币+0.5, 给个红包,谢谢回帖
我当初看着Origin自己起码会用用了,就夸大其词的说,听说Matlab更加高大上,我也要学,看着楼主天书般的帖子,我真想说,还好我只是说说而已…

发自小木虫IOS客户端
7楼2015-10-25 22:29:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wake_up

木虫 (著名写手)



小木虫: 金币+0.5, 给个红包,谢谢回帖
基于Kmeans的图像聚类算法

Matlab自带的Kmeans支持并行计算, 快
8楼2015-10-26 13:13:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiyue6911

新虫 (小有名气)


引用回帖:
8楼: Originally posted by wake_up at 2015-10-26 13:13:19
Matlab自带的Kmeans支持并行计算, 快

谢谢 一会儿试一试

发自小木虫Android客户端
9楼2015-10-26 14:47:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫IOS客户端
nqqtmm5楼
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫IOS客户端
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫Android客户端
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫Android客户端
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫Android客户端
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[硕博家园] 豫北虫友互识 +10 xuhongli903 2024-06-18 11/550 2024-06-20 00:25 by xuhongli903
[基金申请] 面青地会评时间??? +5 Axvdvbfs 2024-06-19 5/250 2024-06-19 21:11 by 人民海军
[基金申请] 75批博后基金 +11 kyukitu 2024-06-13 14/700 2024-06-19 18:44 by Siuhong Yiu
[基金申请] 面上基金有一个(两个)C是不是就没戏了.... 5+4 zzzm116 2024-06-13 21/1050 2024-06-19 18:35 by 匿名374
[访问学者] 国家公派访问学者申请结果出了吗? +4 65syn 2024-06-13 4/200 2024-06-19 16:40 by 海洋之心168
[精细化工] 切削液交流群 +3 SZ吴彦祖 2024-06-17 3/150 2024-06-19 14:31 by herng2021
[论文投稿] ACS AMI 返回审稿意见,一个大修,两个据稿,编辑给的修改重投 +5 智商已更新 2024-06-19 5/250 2024-06-19 12:35 by nono2009
[基金申请] 我标书代码变了 +62 学员NHuqdk 2024-06-16 85/4250 2024-06-19 11:52 by zhangjxnu
[精细化工] 试剂价格 +4 旭必上岸 2024-06-17 4/200 2024-06-18 23:58 by 又幂青松顶
[找工作] 初始合伙人来啦!(生物试剂耗材标准品) +14 欢快的小科研人 2024-06-15 25/1250 2024-06-18 20:35 by 小飞来虫
[考博] 2025考博 +8 自强不息a?a 2024-06-15 13/650 2024-06-18 18:12 by 投必得科研顾问
[高分子] 烧瓶内合成聚酯 +3 大帝国乐 2024-06-17 7/350 2024-06-18 11:10 by 大帝国乐
[基金申请] 太卷了 +13 laoyuefubio 2024-06-17 26/1300 2024-06-18 10:56 by shuigubio
[论文投稿] 论文已接收,但发现修改稿传的是旧版该怎么办? +3 zsq54321 2024-06-15 6/300 2024-06-17 19:45 by wjykycg
[论文投稿] 审稿问题:为什么荧光激发波长和紫外吸收波长差的大? 10+5 sdawege 2024-06-14 10/500 2024-06-17 18:54 by HH-探针
[催化] 镍负载氧化铝的保存问题 8+3 lwn0130 2024-06-15 4/200 2024-06-17 10:48 by adaihao
[基金申请] 博后基金,博管会会提前知道消息吗? +4 yuyiang 2024-06-13 4/200 2024-06-16 11:40 by yangyuzhong4
[论文投稿] 二审返修送审10天了,原来一审的3个审稿人只有2个接受了审稿,会邀请新审稿人么? 50+3 huanpo116 2024-06-15 5/250 2024-06-16 10:27 by bobvan
[基金申请] 关于博后基金的bug问题 +6 lxr1991 2024-06-14 9/450 2024-06-15 21:17 by since—2010
[考博] 申博找导师 +4 疏影横斜水清浅3 2024-06-13 6/300 2024-06-14 14:31 by zxl_1105
信息提示
请填处理意见