24小时热门版块排行榜    

查看: 1746  |  回复: 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的回帖

青青呀呀

新虫 (正式写手)



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

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

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的回帖

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的回帖
简单回复
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客户端
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] F口信息学部拿面上,大概需要什么样的成果 +3 _奋黎_ 2024-06-16 3/150 2024-06-16 15:38 by 我是王小帅
[找工作] 杭电、天津科技、青农和宁波工程学院如何选? +11 味道很好啊 2024-06-13 21/1050 2024-06-16 13:57 by wanglongzh
[论文投稿] 编辑是什么意思 15+3 s090604054 2024-06-15 3/150 2024-06-16 10:29 by bobvan
[论文投稿] 二审返修送审10天了,原来一审的3个审稿人只有2个接受了审稿,会邀请新审稿人么? 50+3 huanpo116 2024-06-15 5/250 2024-06-16 10:27 by bobvan
[找工作] 成都产品质量检测研究院 200+3 鲸鱼663 2024-06-11 9/450 2024-06-16 10:08 by SNaiL1995
[考博] 34岁读博士晚吗 +26 emitdne 2024-06-13 26/1300 2024-06-16 07:16 by liyeqik
[找工作] 江西双非一本和四川双一流高校如何选择? 5+7 寒山敲钟 2024-06-12 23/1150 2024-06-16 06:52 by puterde
[论文投稿] 投稿被一个审稿人恶意评审了怎么样? +5 1chen 2024-06-14 7/350 2024-06-15 23:15 by xy66xy
[基金申请] 博后面上今天有bug可以看到是否资助? +20 lyfbangong 2024-06-12 31/1550 2024-06-15 21:18 by since—2010
[论文投稿] 审稿人含糊拒稿,还需要回复吗?如何回复? 20+3 BruceChum 2024-06-15 17/850 2024-06-15 20:19 by arthas_007
[基金申请] 博后基金,以往的结果点不开,怎么回事呢?最后一次机会了,两次都没中前面。 +7 kyukitu 2024-06-14 13/650 2024-06-15 06:46 by 我是王小帅
[论文投稿] 投了一篇4区的SCI,审稿人一个拒稿,一个小修,编辑给了大修。 +9 安稳22123 2024-06-13 10/500 2024-06-14 23:45 by jurkat.1640
[食品] 食品博士导师 +6 小李醒yy 2024-06-11 9/450 2024-06-14 23:37 by 小李醒yy
[基金申请] 工材E口JQ有消息了吗 +4 babyduck 2024-06-11 4/200 2024-06-14 17:23 by firepick
[有机交流] ππ堆积会发生在有机溶剂中吗 5+3 zibuyu0420 2024-06-13 4/200 2024-06-14 14:17 by 小肉干
[基金申请] 化学会年会改成一年开一次了? +5 babu2015 2024-06-12 13/650 2024-06-14 10:46 by babu2015
[论文投稿] 文章proof要求使用机构的邮箱 5+3 不可不信缘 2024-06-11 11/550 2024-06-14 07:00 by 3001160025
[基金申请] 工材E10口函评结束了吗 10+3 我1的飞翔 2024-06-13 5/250 2024-06-14 06:35 by nono2009
[论文投稿] water research状态咨询 5+3 Flyyawa 2024-06-10 6/300 2024-06-11 09:45 by bobvan
[教师之家] 公办双非,学生论文升学就业都不行。一本大学的论文升学就业没问题吧? +5 河西夜郎 2024-06-09 5/250 2024-06-10 17:59 by yyallen2003
信息提示
请填处理意见