matlab C均值聚类算法FCM用图像分割的彻底解析

 时间:2024-10-14 06:50:55

1、首先,你要知道限鬃鹣哺什么是C均值聚类算法,就是那个公式,你最好要能推出来,其次,要明白matlab中自带僻棍募暖FCM 的代码含义,在命令窗中输入 edit fcm; 会在M文件中打开,前面是注释function [center, U, obj_fcn] = fcm(data, cluster_n, options)%FCM Data set clustering using fuzzy c-means clustering.%% [CENTER, U, OBJ_FCN] = FCM(DATA, N_CLUSTER) findsN_CLUSTER number of% clusters in the data set DATA. DATA is size M-by-N, where M isthe number of% data points and N is the number of coordinates for each data point. The% coordinates for each cluster center are returned in the rows of the matrix% CENTER. The membership function matrix U contains the grade of membership of% each DATA point in each cluster. The values 0 and 1 indicate no membership% and full membership respectively. Grades between 0 and 1 indicate that the% data point has partial membership in a cluster. At each iteration, an% objective function is minimized to find the best location for the clusters% and its values are returned in OBJ_FCN.%% [CENTER, ...] = FCM(DATA,N_CLUSTER,OPTIONS) specifies a vector of options% for the clustering process:% OPTIONS(1): exponent for the matrix U (default: 2.0)% OPTIONS(2): maximum number of iterations (default: 100)% OPTIONS(3): minimum amount of improvement (default: 1e-5)% OPTIONS(4): info display during iteration (default: 1)% The clustering process stops when the maximum number of iterations% is reached, or when the objective function improvement between two% consecutive iterations is less than the minimum amount of improvement% specified. Use NaN to select the default value.%% Example% data = rand(100,2);% [center,U,obj_fcn] = fcm(data,2);% plot(data(:,1), data(:,2),'o');% hold on;% maxU = max(U);% % Find the data points with highest grade of membership in cluster 1% index1 = find(U(1,:) == maxU);% % Find the data points with highest grade of membership in cluster 2% index2 = find(U(2,:) == maxU);% line(data(index1,1),data(index1,2),'marker','*','color','g');% line(data(index2,1),data(index2,2),'marker','*','color','r');% % Plot the cluster centers% plot([center([1 2],1)],[center([1 2],2)],'*','color','k')% hold off;%% See also FCMDEMO, INITFCM, IRISFCM, DISTFCM, STEPFCM.% Roger Jang, 12-13-94, N. Hickey 04-16-01% Copyright 1994-2002 The MathWorks, Inc.% $Revision: 1.13 $ $Date: 2002/04/14 22:20:38 $% %后是说明部分,从此处开始是函数定义if nargin ~= 2 & nargin ~= 3,error('Too many or too few input arguments!');enddata_n = size(data, 1);in_n = size(data, 2);% Change the following to set default optionsdefault_options = [2;% exponent for the partition matrix U100;% max. number of iteration1e-5;% min. amount of improvement1];% info display during iterationif nargin == 2,options = default_options;else% If "options" is not fully specified, pad it with default values.if length(options) < 4,tmp = default_options;tmp(1:length(options)) = options;options = tmp;end% If some entries of "options" are nan's, replace them with defaults.nan_index = find(isnan(options)==1);options(nan_index) = default_options(nan_index);if options(1) <= 1,error('The exponent should be greater than 1!');endendexpo = options(1);% Exponent for Umax_iter = options(2);% Max. iterationmin_impro = options(3);% Min. improvementdisplay = options(4);% Display info or notobj_fcn = zeros(max_iter, 1);% Array for objective functionU = initfcm(cluster_n, data_n);% Initial fuzzy partition% Main loopfor i = 1:max_iter,[U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);if display,fprintf('Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));end% check termination conditionif i > 1,if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro, break; end,endenditer_n = i;% Actual number of iterationsobj_fcn(iter_n+1:max_iter) = [];英文看起来比较郁闷的看中文如下

matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析

2、关于初始化子函数  function U = initfcm(cluster_n, data_n), 代码全解如下

matlab C均值聚类算法FCM用图像分割的彻底解析

3、下一个迭代子函数 function [U_new, center, obj_fcn] = stepfcm(data, U, cluster_n, expo)

matlab C均值聚类算法FCM用图像分割的彻底解析

4、下一个计算距离子函数 function out = distfcm(center, data)

matlab C均值聚类算法FCM用图像分割的彻底解析

5、所以这些函数都是用matlab 自带的函数,包括子函数,你可以把所有的函数放在一个M文件中 下面将贴出我自己的关于FCM的全码,都是在自带函数基础上改的,

matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析

6、接着进行图像分割,调用代码如下,可以直接输入在命令窗口中,这段代码大家要好好研究

matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析

7、下面展示下效果图,有迭代次数,聚类中心,还有分割后的图像。大家研究下吧

matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
matlab C均值聚类算法FCM用图像分割的彻底解析
  • 信噪比计算公式是什么
  • MATLAB中矩阵的加减,乘法运算及三者注意事项
  • 【MATLAB】绘图技巧(1)——绘图基本函数plot
  • matlab是什么编程语言
  • matlab中结果是什么意思?其中的e表示什么
  • 热门搜索
    数学乐园手抄报 运动会手抄报图片 绿色校园手抄报内容 民族精神手抄报 教师节手抄报简单又漂亮 战争与和平手抄报 科技节手抄报内容 艺术节手抄报内容 端午手抄报模板 文明交通手抄报图片