matlab模糊聚类算法进行图像分割的源程序.doc
- 文档编号:701800
- 上传时间:2023-04-29
- 格式:DOC
- 页数:4
- 大小:42KB
matlab模糊聚类算法进行图像分割的源程序.doc
《matlab模糊聚类算法进行图像分割的源程序.doc》由会员分享,可在线阅读,更多相关《matlab模糊聚类算法进行图像分割的源程序.doc(4页珍藏版)》请在冰点文库上搜索。
%%%%%%%%%%%%%%%模糊聚类%%%%%%%%%%%%%%%%%%%%%%%
clear;
loadF:
\从0开始\数据\data.txt;
INPUTDATA=data;
%--------原始数据标准化-------%
disp('请选择原始数据标准化方式:
');
disp('<1-总和标准化|2-标准差标准化|3-极大值标准化|4-极差标准化>');
wayforstand=input('请输入:
');
switchwayforstand
case1,
DATAFORCLUS=standard_use_sum(INPUTDATA);
case2,
DATAFORCLUS=standard_use_std(INPUTDATA);
case3,
DATAFORCLUS=standard_use_max(INPUTDATA);
case4,
DATAFORCLUS=standard_use_jc(INPUTDATA);
otherwise
error('您的输入不符合要求->执行结束!
!
!
');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基于模糊等价关系的模糊聚类%%%%%%%%%%%%%%%%%%%%%%
%----------构造相似关系-----------%
numrows=size(DATAFORCLUS,1);
numcols=size(DATAFORCLUS,2);
disp('请选择对象之间相似性统计量的方式:
');
disp('<1-相关系数法|2-夹角余弦法|3-指数相似系数法|4-绝对值指数法|5-算术平均最小法|6-最大最小值法|7-绝对值差数法|8-数量积法>');
wayforr_ij=input('请输入:
');
switchwayforr_ij
case1,%-----------------------------------相关系数法
fori=1:
numrows,
forj=1:
numrows,
meani=mean(DATAFORCLUS(i,:
));meanj=mean(DATAFORCLUS(j,:
));
simiR(i,j)=sum((DATAFORCLUS(i,:
)-meani).*(DATAFORCLUS(j,:
)-meanj))/...
(sqrt(sum((DATAFORCLUS(i,:
)-meani).^2))*sqrt(sum((DATAFORCLUS(j,:
)-meanj).^2)));
end
end
case2,%-----------------------------------夹角余弦法
fori=1:
numrows,
forj=1:
numrows,
simiR(i,j)=sum(DATAFORCLUS(i,:
).*DATAFORCLUS(j,:
))/...
(sqrt(sum(DATAFORCLUS(i,:
).*DATAFORCLUS(i,:
)))*sqrt(sum(DATAFORCLUS(j,:
).*DATAFORCLUS(j,:
))));
end
end
case3,%-----------------------------------指数相似系数法
case4,%-----------------------------------绝对值指数法
case5,%-----------------------------------算术平均最小法
case6,%-----------------------------------最大最小值法
case7,%-----------------------------------绝对值差数法
case8,%-----------------------------------数量积法
otherwise
error('您的输入不符合要求->执行结束!
!
!
');
end
%-------改造成等价关系----------%
sign=0;
numselfmul=1;
simiRk=eye(numrows);
equi_tem=simiR;
whilesign==0,
fori=1:
numrows,
forj=1:
numrows,
forc=1:
numrows,
rij_temp(c)=min([equi_tem(i,c)equi_tem(c,j)]);
end
simiRk(i,j)=max(rij_temp);
end
end
%--------------%
ifsum(sum(simiRk-equi_tem,1))~=0,
numselfmul=numselfmul+1;
equi_tem=simiRk;
else
sign=1;
break
end
%--------------%
end
ifsign==1,
disp('从相似矩阵到等价矩阵改造成功!
!
!
');
else
disp('从相似矩阵到等价矩阵改造失败!
!
!
');
end
equiR=simiRk;
numclass=input('请输入聚类数:
');
%---------在不同的截集水平进行聚类--------------%
clasc=0;
comp_vec(1,1:
numrows)=0;
index=0;
clasc=0;
tip=0;
alpha=0;
temnumeachclass=0;
while(tip==0),
%alpha=input('请输入进行分类的截集水平λ:
');
%alpha=0.5;%调试
if(alpha<0||alpha>1),
error('您输入的截集水平λ不符合分类要求->执行结束!
!
!
');
end
comp_arr=ones(numrows)*alpha;
result_arr=(equiR>=comp_arr);%--------------------result_arr判断矩阵
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%捡菜算法
fori=1:
numrows,
ifsum(comp_vec(1,:
)==result_arr(i,:
)) temnumeachclass=0; %numeachclass(clasc)=index-temnumeachclass; temsave=result_arr(i,: ); forj=1: numrows, ifsum(result_arr(j,: )==temsave)==numrows, index=index+1; class(index)=j; result_arr(j,: )=0;%--------------------说明已经被归类 temnumeachclass=temnumeachclass+1; end end clasc=clasc+1; nec(clasc)=temnumeachclass; else continue; end end ifclasc>=numclass, tip=1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%当模糊分类的数目小于等于所给出的类数时退出循环体 disp('成功! ! ! '); else clearclass; clearnumeachclass; clearnec; clasc=0; index=0; temnumeachclass=0; alpha=alpha+0.01; end end %----取聚类结果----% num=0; n=0; fori=1: clasc, forj=1: nec(i), num=num+1; n=n+1; CLUS(n,: )=INPUTDATA(class(num),: ); end n=n+1; CLUS(n,: )=inf; end %formatsingle(CLUS) lenexport=size(CLUS,1); fori=1: lenexport, RESULT(i,: )=sprintf('%15.2f',CLUS(i,: )); end RESULT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 模糊 算法 进行 图像 分割 源程序