24小时热门版块排行榜    

查看: 1719  |  回复: 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的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

wake_up

木虫 (著名写手)



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

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

青青呀呀

新虫 (正式写手)



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

发自小木虫IOS客户端
7楼2015-10-25 22:29:02
已阅   回复此楼   关注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的回帖

zphpinganye

铁虫 (正式写手)


11楼2018-03-13 12:45:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫Android客户端
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫IOS客户端
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫Android客户端
nqqtmm5楼
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫IOS客户端
2015-10-25 22:05   回复  
xiyue6911(金币+1): 谢谢参与
已获得1个金币 发自小木虫Android客户端
相关版块跳转 我要订阅楼主 xiyue6911 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[教师之家] 女博士高校择业三天之内签合同,求支招 +23 chengmy19 2024-05-23 31/1550 2024-05-23 18:49 by 化学不容易
[硕博家园] 又见奇葩学生,可咋办 +26 appleapple2 2024-05-17 31/1550 2024-05-23 18:34 by l12922927
[基金申请] 化学口面上 +5 乐丰松庆 2024-05-23 6/300 2024-05-23 18:04 by ddr6021023
[有机交流] 苯磺酰氯与醇羟基反应 5+4 杨怼怼? 2024-05-22 12/600 2024-05-23 15:59 by mrzhl1986
[论文投稿] Neurocomputing 外审结束 +5 mollyzhang_2003 2024-05-23 5/250 2024-05-23 12:03 by nono2009
[基金申请] 审不上青基又非升即走的青椒 和 牢里踩缝纫机的犯人哪个活的更舒服一点? +18 非非飞远了 2024-05-20 21/1050 2024-05-23 11:03 by zyqchem
[基金申请] 河北省基金 +14 3101251516 2024-05-16 22/1100 2024-05-23 10:50 by 3101251516
[教师之家] 经常觉得挺累的 +9 zylfront 2024-05-22 15/750 2024-05-23 10:05 by ayalex
[硕博家园] 人生 +10 暮色恋伊人 2024-05-22 10/500 2024-05-23 08:33 by happy个
[博后之家] 山东大学(青岛)“天然药物生物智造”课题组 招聘“博士后”(年薪20.4-55.6万元) +3 第二种态度 2024-05-18 7/350 2024-05-23 07:52 by 小懂事k
[考博] 大扩招 +12 version211 2024-05-21 18/900 2024-05-22 23:02 by 村安全顾问
[基金申请] bless bless bless bless bless bless +6 chenwenqnig 2024-05-19 7/350 2024-05-22 22:59 by 957083516
[教师之家] 执念 +9 459582015 2024-05-16 10/500 2024-05-22 19:28 by 预演556
[硕博家园] 博士复试,申请成绩复核,有机会翻盘吗? +15 长海二声笑 2024-05-21 22/1100 2024-05-22 12:44 by 带甲三千
[硕博家园] 2024/2025碳纳米材料方向博士/科研助理申请 +4 小二仙 2024-05-21 7/350 2024-05-22 09:51 by 呼呼一哈黑
[复合材料] 关于导电胶 +3 wgx2000 2024-05-17 6/300 2024-05-22 09:42 by wgx2000
[论文投稿] SENSORS AND ACTUATORS B-CHEMICAL 15+4 荣小撇 2024-05-20 4/200 2024-05-21 10:07 by ca0yan9
[论文投稿] 推荐转投( transfer pending)是否有用? 50+3 lily5289 2024-05-17 7/350 2024-05-19 15:11 by wanghuawei
[论文投稿] 投稿成功后又想撤回 +5 otani 2024-05-16 5/250 2024-05-17 16:02 by topedit
[硕博家园] 五氯化铌怎么溶解啊 +3 南南枝枝 2024-05-17 5/250 2024-05-17 11:37 by ad_fish
信息提示
请填处理意见