資源簡介
實(shí)現(xiàn)多種功能,解釋清楚明了的matlab程序,實(shí)現(xiàn)醫(yī)學(xué)圖像分割

代碼片段和文件信息
function?[center?U?obj_fcn]?=?FCMClust(data?cluster_n?options)
%?FCMClust.m???采用模糊C均值對(duì)數(shù)據(jù)集data聚為cluster_n類?
%
%?用法:
%???1.??[centerUobj_fcn]?=?FCMClust(DataN_clusteroptions);
%???2.??[centerUobj_fcn]?=?FCMClust(DataN_cluster);
%???
%?輸入:
%???data????????----?nxm矩陣表示n個(gè)樣本每個(gè)樣本具有m的維特征值
%???N_cluster???----?標(biāo)量表示聚合中心數(shù)目即類別數(shù)
%???options?????----?4x1矩陣,其中
%???????options(1):??隸屬度矩陣U的指數(shù),>1??????????????????(缺省值:?2.0)
%???????options(2):??最大迭代次數(shù)???????????????????????????(缺省值:?100)
%???????options(3):??隸屬度最小變化量迭代終止條件???????????(缺省值:?1e-5)
%???????options(4):??每次迭代是否輸出信息標(biāo)志????????????????(缺省值:?1)
%?輸出:
%???center??????----?聚類中心
%???U???????????----?隸屬度矩陣
%???obj_fcn?????----?目標(biāo)函數(shù)值
%???Example:
%???????data?=?rand(1002);
%???????[centerUobj_fcn]?=?FCMClust(data2);
%???????plot(data(:1)?data(:2)‘o‘);
%???????hold?on;
%???????maxU?=?max(U);
%???????index1?=?find(U(1:)?==?maxU);
%???????index2?=?find(U(2:)?==?maxU);
%???????line(data(index11)data(index12)‘marker‘‘*‘‘color‘‘g‘);
%???????line(data(index21)data(index22)‘marker‘‘*‘‘color‘‘r‘);
%???????plot([center([1?2]1)][center([1?2]2)]‘*‘‘color‘‘k‘)
%???????hold?off;
if?nargin?~=?2?&?nargin?~=?3????%判斷輸入?yún)?shù)個(gè)數(shù)只能是2個(gè)或3個(gè)
error(‘Too?many?or?too?few?input?arguments!‘);
end
data_n?=?size(data?1);?%?求出data的第一維(rows)數(shù)即樣本個(gè)數(shù)
in_n?=?size(data?2);???%?求出data的第二維(columns)數(shù),即特征值長度
%?默認(rèn)操作參數(shù)
default_options?=?[2; %?隸屬度矩陣U的指數(shù)
????100;????????????????%?最大迭代次數(shù)?
????1e-5;???????????????%?隸屬度最小變化量迭代終止條件
????1];?????????????????%?每次迭代是否輸出信息標(biāo)志?
if?nargin?==?2
options?=?default_options;
?else???????%分析有options做參數(shù)時(shí)候的情況
%?如果輸入?yún)?shù)個(gè)數(shù)是二那么就調(diào)用默認(rèn)的option;
if?length(options)?4?%如果用戶給的opition數(shù)少于4個(gè)那么其他用默認(rèn)值;
tmp?=?default_options;
tmp(1:length(options))?=?options;
options?=?tmp;
????end
????%?返回options中是數(shù)的值為0(如NaN)不是數(shù)時(shí)為1
nan_index?=?find(isnan(options)==1);
????%將denfault_options中對(duì)應(yīng)位置的參數(shù)賦值給options中不是數(shù)的位置.
options(nan_index)?=?default_options(nan_index);
if?options(1)?<=?1?%如果模糊矩陣的指數(shù)小于等于1
error(‘The?exponent?should?be?greater?than?1!‘);
end
end
%將options?中的分量分別賦值給四個(gè)變量;
expo?=?options(1);??????????%?隸屬度矩陣U的指數(shù)
max_iter?=?options(2); %?最大迭代次數(shù)?
min_impro?=?options(3); %?隸屬度最小變化量迭代終止條件
display?=?options(4); %?每次迭代是否輸出信息標(biāo)志?
obj_fcn?=?zeros(max_iter?1); %?初始化輸出參數(shù)obj_fcn
U?=?initfcm(cluster_n?data_n);?????%?初始化模糊分配矩陣使U滿足列上相加為1
%?Main?loop??主要循環(huán)
for?i?=?1:max_iter
????%在第k步循環(huán)中改變聚類中心ceneter和分配函數(shù)U的隸屬度值;
[U?center?obj_fcn(i)]?=?stepfcm(data?U?cluster_n?expo);
if?display?
fprintf(‘FCM:Iteration?count?=?%d?obj.?fcn?=?%f\n‘?i?obj_fcn(i));
end
%?終止條件判別
if?i?>?1
if?abs(obj_fcn(i)?-?obj_fcn(i-1))?????????????break;
????????end
end
end
iter_n?=?i; %?實(shí)際迭代次數(shù)?
obj_fcn(iter_n+1:max_iter)?=?[];
%?子函數(shù)
function?U?=?initfcm(cluster_n?data_n)
%?初始化fcm的隸屬度函數(shù)矩陣
%?輸入:
%???cluster_n???----?聚類中心個(gè)數(shù)
%???data_n??????----?樣本點(diǎn)數(shù)
%?輸出:
%???U???????????----?初始化的隸屬度矩陣
U?=?r
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4794??2005-05-06?21:43??FCM\FCMClust.m
?????文件??????98226??2005-11-26?14:24??FCM\fcm結(jié)果2.jpg
?????文件?????185480??2005-11-26?14:10??FCM\imsdata.mat
?????文件???????6369??2005-09-22?18:45??FCM\KFCMClust.m
?????文件??????15202??2005-11-26?14:37??FCM\MainGUI.fig
?????文件??????29990??2005-11-26?14:43??FCM\MainGUI.m
?????文件?????128731??2005-05-06?11:14??FCM\核聚類算法2.pdf
?????目錄??????????0??2009-05-07?09:15??FCM
-----------?---------??----------?-----??----
???????????????468792????????????????????8
評(píng)論
共有 條評(píng)論