3986.net
小网站 大容量 大智慧
当前位置:首页 >> 计算机软件及应用 >>

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


1.myfcm 函数 function [center, U, obj_fcn] = myfcm(data, cluster_n, options) %data 为聚类数据,cluster_n 为类别数 %判断函数参数个数 if nargin ~= 2 & nargin ~= 3, error('参数太多或太少'); end data_n = size(data, 1); %data 第一维大小 in_n = size(data, 2); %data 第二维大小 % 可以改变下列数据设置默认的 options 参数 default_options = [2; % FCM 中的参数 m 100; % 最大迭代次数 1e-5; % 判别误差 epsonal 1]; % 迭代过程中显示 if nargin == 2, options = default_options; else % 如果"options" 没有完全指定,则以 default_options 中的部分进行补充 if length(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) = default_options(nan_index); if options(1) <= 1 error('FCM 中参数 m 应大于 1!'); end end expo = options(1); % expo 存放参数 m max_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 函数初始化隶属度矩阵 U

for i = 1:max_iter [U, center, obj_fcn(i)] = myfcmstep(data, U, cluster_n, expo); %调用 myfcmstep 函数进行一

次迭代 if display==1 fprintf('迭代次数 = %d, obj. fcn = %f\n', i, obj_fcn(i)); end % 检查迭代终止条件 if i > 1, if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro break; end end end iter_n = i; % iter_n 为实际迭代次数 obj_fcn(iter_n+1:max_iter) = [];

2.myfcminit 函数,用于对隶属度矩阵进行初始化 function U = myfcminit (cluster_n, data_n) % % U 为隶属度矩阵,大小为:类别数*被聚类数据元素个数 %参数 cluster_n 为聚类类别数 %data_n 为被聚类数据的元素个数 % U = rand(cluster_n, data_n); %随机生成隶属度矩阵 U col_sum = sum(U);%计算 U 中每列元素和 U = U./col_sum(ones(cluster_n, 1), :); %保证 U 中每列的隶属度值之和为 1 3. myfcmstep 函数用于聚类过程中的每次迭代 function [U_new, center, obj_fcn] = myfcmstep (data, U, cluster_n, expo) % % data 为被聚类数据,U 为隶属度矩阵,cluster_n 为聚类类别数,expo 为 FCM 中的参数 m % 函数调用后得到新的隶属度矩阵 U_new,聚类中心 center,目标函数值 obj_fcn % mf = U.^expo; % FMC 中的 U^m center = 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-1)); % 如果迭代次数不为 1,计算新的隶属度矩阵 U_new = tmp./(ones(cluster_n, 1)*sum(tmp)); % U_new 为新的隶属度矩阵 4.myfcmdist 函数用于计算聚类中心与被聚类数据的距离

function out =myfcmdist (center, data) % % center 为聚类中心,data 为被聚类数据 % out = zeros(size(center, 1), size(data, 1)); if size(center, 2) > 1, %若聚类中心数据大于 1,即聚类类别>=2 for k = 1:size(center, 1), out(k, :) = sqrt(sum(((data-ones(size(data, 1), 1)*center(k, :)).^2)')); end else % data 为一维数据 for k = 1:size(center, 1), out(k, :) = abs(center(k)-data)'; end end 5.fcmapp 函数实现聚类分割图像 function myfcmseg(file, cluster_n) % file: 图像文件. % cluster_n: 聚类类别数. eval(['info=imfinfo(''',file, ''');']); %获取文件信息 switch info.ColorType case 'truecolor' %真彩色图像 eval(['RGB=imread(''',file, ''');']); I = rgb2gray(RGB); clear RGB; case 'indexed' %索引图像 eval(['[X, map]=imread(''',file, ''');']); I = ind2gray(X, map); clear X; case 'grayscale' %灰度图像 eval(['I=imread(''',file, ''');']); end; I = im2double(I); filename = file(1 : find(file=='.')-1); %获取主文件名 data = reshape(I, numel(I), 1); %将图像数据转为一列数据 tic %计时开始 options=[2; % FCM 中的参数 m 100; % 最大迭代次数 1e-5; % 判别误差 epsonal 1]; [center, U, obj_fcn]=myfcm(data, cluster_n,options); %调用 myfcm 函数进行聚类 elapsedtime = toc; %聚类结束,计时结束,elapsedtime 为进行聚类,所花时间 %聚类所获得数据保存在 filename.mat 文件中

%eval(['save(', filename, int2str(cluster_n),'.mat'', ''center'', ''U'', ''obj_fcn'', ''elapsedtime'');']); %fprintf('聚类耗时 = %d', elapsedtime); maxU=max(U); temp = sort(center); for n = 1:cluster_n; %按聚类结果分割图像 eval(['cluster',int2str(n), '_index = find(U(', int2str(n), ',:) == maxU);']); index = find(temp == center(n)); switch index case 1 color_class = 0; case cluster_n color_class = 255; otherwise color_class = fix(255*(index-1)/(cluster_n-1)); end eval(['I(cluster',int2str(n), '_index(:))=', int2str(color_class),';']); end; I = mat2gray(I); %eval(['imwrite(I,', filename,'_seg', int2str(cluster_n), '.bmp'');']); %保存生成的分割图像 imshow(I);%显示生成的分割的图像


推荐相关:

基于自适应FCM聚类的彩色图像区域分割算法

龙源期刊网 http://www.qikan.com.cn 基于自适应 FCM 聚类的彩色图像区域分割...摘要: 传统的基于聚类的图像分割方法大都存在聚类数目难以确定、过度分割等缺点。...


基于鲁棒性的广义FCM图像分割算法

特别是模糊 C-均值算法 (FCM)得到了广泛的研究,并成功应用于图像聚类和图像分割中,由于该方法的模糊性相比 硬聚类方法保留了更多的原始信息,使得该方法成为一个...


彩色图像分割混合方法

彩色图像分割混合方法 - 使用直方图 c 聚类混合方法的彩色图像分割 摘要: 本文提出了一种新的直方图阈值–模糊 C-均值混合(htfcm)的方法,这种方法可以应用到 模式...


灰度图像分割方法比较

灰度图像分割方法比较 - 一、基于 FCM 的图像分割(调用 FCM 函数) clc clear all I=imread('14.jpg'); figure,imshow(I) I2=rgb2...


基于FCM的图像分割

很少自己一个人编写一个解决问题 的程序,更就没有过冥思苦想如何解决一个问题...fcm方法进行图像分割源程... 暂无评价 4页 免费 基于FCM的图像分割 暂无评价...


用于图像分割的具有空间信息的模糊c均值聚类

用于图像分割的具有空间信息的模糊 c 均值聚类提要...利用了可用的机密信息,并将其作为 其优化程序的一...改进的 FCM 算法改进了传统的 FCM 方法在噪声图像...


基于改进的FCM算法的MRI脑图像的自动分割

基于改进的FCM算法的MRI脑图像的自动分割 - 基于改进 FCM 算法的 MR 图像自动分割 摘要 传统模糊 C 均值广泛应用于图像分割 ,它是一种经典模糊聚类分析方法...


非局部模糊C均值聚类图像分割

因此,含局部空间信息 GIFP_FCM 算法得不到满意的分割效 果。在本文中,首先定义了一种新非局部自适应空间条件,它由图像恢复中 非局部均值方法获得。然后,...


模糊聚类FFCM法-Read

传统 FCM 算法在图像分割中已经获得了广泛应用,而且对大多数问题 均能获得好分割效果。然而,FCM 算法中模糊划分矩阵 U 的计算会随样本数 与聚类数目的增加...

网站首页 | 网站地图
3986 3986.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com