fcm方法进行图像分割源程序.doc

fcm方法进行图像分割源程序.doc

ID:52564736

大小:38.50 KB

页数:4页

时间:2020-03-28

fcm方法进行图像分割源程序.doc_第1页
fcm方法进行图像分割源程序.doc_第2页
fcm方法进行图像分割源程序.doc_第3页
fcm方法进行图像分割源程序.doc_第4页
资源描述:

《fcm方法进行图像分割源程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.myfcm函数function[center,U,obj_fcn]=myfcm(data,cluster_n,options)%data为聚类数据,cluster_n为类别数%判断函数参数个数ifnargin~=2&nargin~=3,error('参数太多或太少');enddata_n=size(data,1);%data第一维大小in_n=size(data,2);%data第二维大小%可以改变下列数据设置默认的options参数default_options=[2;%FCM中的参数m100;%最大迭代次数1e-5;%判别误差epsonal1];%迭代过程中显示i

2、fnargin==2,options=default_options;else%如果"options"没有完全指定,则以default_options中的部分进行补充iflength(options)<4,tmp=default_options;tmp(1:length(options))=options;options=tmp;end%如果options中的一些参数不是数字,则以default_options中的代替nan_index=find(isnan(options)==1);%找到options中的非数字元素下标options(nan_index)=defaul

3、t_options(nan_index);ifoptions(1)<=1error('FCM中参数m应大于1!');endendexpo=options(1);%expo存放参数mmax_iter=options(2);%最大迭代次数min_impro=options(3);%判别误差display=options(4);%迭代过程是否显示obj_fcn=zeros(max_iter,1);%obj_fcn为目标函数值数组U=myfcminit(cluster_n,data_n);%调用myfcminit函数初始化隶属度矩阵Ufori=1:max_iter[U,cente

4、r,obj_fcn(i)]=myfcmstep(data,U,cluster_n,expo);%调用myfcmstep函数进行一次迭代ifdisplay==1fprintf('迭代次数=%d,obj.fcn=%f',i,obj_fcn(i));end%检查迭代终止条件ifi>1,ifabs(obj_fcn(i)-obj_fcn(i-1))

5、fcminit(cluster_n,data_n)%%U为隶属度矩阵,大小为:类别数*被聚类数据元素个数%参数cluster_n为聚类类别数%data_n为被聚类数据的元素个数%U=rand(cluster_n,data_n);%随机生成隶属度矩阵Ucol_sum=sum(U);%计算U中每列元素和U=U./col_sum(ones(cluster_n,1),:);%保证U中每列的隶属度值之和为13.myfcmstep函数用于聚类过程中的每次迭代function[U_new,center,obj_fcn]=myfcmstep(data,U,cluster_n,expo)%

6、%data为被聚类数据,U为隶属度矩阵,cluster_n为聚类类别数,expo为FCM中的参数m%函数调用后得到新的隶属度矩阵U_new,聚类中心center,目标函数值obj_fcn%mf=U.^expo;%FMC中的U^mcenter=mf*data./((ones(size(data,2),1)*sum(mf'))');%得到聚类中心dist=myfcmdist(center,data);%调用myfcmdist函数计算聚类中心与被聚类数据的距离obj_fcn=sum(sum((dist.^2).*mf));%得到目标函数值tmp=dist.^(-2/(expo-

7、1));%如果迭代次数不为1,计算新的隶属度矩阵U_new=tmp./(ones(cluster_n,1)*sum(tmp));%U_new为新的隶属度矩阵4.myfcmdist函数用于计算聚类中心与被聚类数据的距离functionout=myfcmdist(center,data)%%center为聚类中心,data为被聚类数据%out=zeros(size(center,1),size(data,1));ifsize(center,2)>1,%若聚类中心数据大于1,即聚类类别>=2fork=1:size(center,1)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。