Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2009-05-01
帖子: 2
声望力: 0 ![]() |
![]()
原代码:
%初始化5个聚类中心,对经过处理的图像进行基于k-means聚类的子区域处理 function k=clusterpartition(locs) ct=[50,50;140,50;90,120;50,170;130,170];%平均随机选取5个聚类中心 tic; for i=1:200 dist1=sqrt((locs(:,1)-ct(1,1)).^2+(locs(:,2)-ct(1,2)).^2); dist2=sqrt((locs(:,1)-ct(2,1)).^2+(locs(:,2)-ct(2,2)).^2); dist3=sqrt((locs(:,1)-ct(3,1)).^2+(locs(:,2)-ct(3,2)).^2); dist4=sqrt((locs(:,1)-ct(4,1)).^2+(locs(:,2)-ct(4,2)).^2); dist5=sqrt((locs(:,1)-ct(5,1)).^2+(locs(:,2)-ct(5,2)).^2); dt=[dist1,dist2,dist3,dist4,dist5]; [m,n]=min(dt'); newlocs=[locs,n']; [r,c]=size(newlocs); sub1=[]; sub2=[]; sub3=[]; sub4=[]; sub5=[]; for j=1:r switch newlocs(j,5) case 1 sub1=[sub1;newlocs(j,:)]; case 2 sub2=[sub2;newlocs(j,:)]; case 3 sub3=[sub3;newlocs(j,:)]; case 4 sub4=[sub4;newlocs(j,:)]; case 5 sub5=[sub5;newlocs(j,:)]; end end if size(sub1,1)>1 subm1=mean(sub1); else subm1=sub1; end if size(sub2,1)>1 subm2=mean(sub2); else subm2=sub2; end if size(sub3,1)>1 subm3=mean(sub3); else subm3=sub3; end if size(sub4,1)>1 subm4=mean(sub4); else subm4=sub4; end if size(sub5,1)>1 subm5=mean(sub5); else subm5=sub5; end ct=[subm1(1,1),subm1(1,2);subm2(1,1),subm2(1,2);subm3(1,1),subm3(1,2);subm4(1,1),subm4(1,2);subm5(1,1),subm5(1,2)]; end dist1=sqrt((locs(:,1)-ct(1,1)).^2+(locs(:,2)-ct(1,2)).^2); dist2=sqrt((locs(:,1)-ct(2,1)).^2+(locs(:,2)-ct(2,2)).^2); dist3=sqrt((locs(:,1)-ct(3,1)).^2+(locs(:,2)-ct(3,2)).^2); dist4=sqrt((locs(:,1)-ct(4,1)).^2+(locs(:,2)-ct(4,2)).^2); dist5=sqrt((locs(:,1)-ct(5,1)).^2+(locs(:,2)-ct(5,2)).^2); dt=[dist1,dist2,dist3,dist4,dist5]; [m,n]=min(dt'); k=[locs,n']; toc; 说明:locs是一个求得的73X4矩阵 这段代码在m文件中编写,运行时循环只能执行一次,很奇怪。 我把代码直接复制到Command Windows里,程序成功运行。 我在m文件中设置断点执行,也可以成功运行。 很奇怪,请高手指点。 |
![]() |
![]() |