图像l,a,b空间的l通道的模糊C均值聚类- 往事随风的日志- 网易博客

图像l,a,b空间的l通道的模糊C均值聚类

2010-05-01 19:50:25 阅读7 评论0 字号:

(2008-09-27 10:22:19)

TE>图像l,a,b空间的l通道的模糊C均值聚类 - 往事随风 - 基于图的半监督学习转载TE>

模糊C均值聚类算法如下

1) 从n个数据集data = ( x1 , x2 , ..., xn ) 中,确定聚类域个数c ,随机选取初始的

聚类中心集V0 = ( v1 , v2 ,..., vc ) ,确定隶属度矩阵U的加权指数expo 、{zd0}迭代次数max_iter、终止误差ε> 0。

2) 重复下列操作,直到‖Vb+1 - Vb ‖ <ε为止, b为当前

迭代次数。

    a) 使用当前的Vb ,计算隶属度矩阵Ub。

    b) 使用当前的Ub ,计算聚类中心Vb+1。

%%%%%定义距离函数%%%%%%%%%%%

function out = distfcm(center, data)

% 计算样本点到聚类中心的距离

% 输入:

  center     ---- 聚类中心

  data       ---- 样本点

% 输出:

  out        ---- 距离

out = zeros(size(center, 1), size(data, 1));

for k = 1:size(center, 1), % 对每一个聚类中心

    % 每一次循环求得所有样本点到一个聚类中心的距离

    out(k, :) = sqrt(sum(((data-ones(size(data,1),1)*center(k,:)).^2)',1));

en

%%%%%定义迭代函数%%%%%%

function [U_new, center, obj_fcn] = stepfcm(data, U, cluster_n, expo)

% 模糊C均值聚类时迭代的一步

% 输入:

  data        ---- nxm矩阵,表示n个样本,每个样本具有m维特征值

           ---- 隶属度矩阵

  cluster_n   ---- 标量,表示聚合中心数目,即类别数

  expo        ---- 隶属度矩阵U的指数                     

% 输出:

  U_new       ---- 迭代计算出的新的隶属度矩阵

  center      ---- 迭代计算出的新的聚类中心

  obj_fcn     ---- 聚类中心集

mf = U.^expo;       % 隶属度矩阵进行指数运算结果

center = (mf*data)'./sum(mf'); % 新聚类中心

dist = distfcm(center', data);       % 计算距离矩阵

obj_fcn = center';  % 计算聚类中心集

tmp = dist.^(-2/(expo-1));    

U_new = tmp./(ones(cluster_n, 1)*sum(tmp));  % 计算新的隶属度矩阵

%%%%%%%模糊模糊C均值聚类%%%%%%%

figure(1);

Ag=imread('2.bmp');   %待聚类图像

Ag=Ag(1:260,1:250,:);

subplot(211);imagesc(Ag,[0 1]); colormap(gray);title('聚类原图像');

Ag=double(Ag);

labAg=rgblab(Ag,0);

%%%%-------分离lab通道------

labAg1=labAg(:,:,1);

[m n]=size(labAg1);

%%%%--------将l通道的像素转换成一列----

labAg11=im2col(labAg1,[m n],'distinct');

%%%%----——确定样本点数和聚类中心个数————

data_ng = m*n;

cluster_ng=3;     %确定聚类个数

expo=2;      % 隶属度矩阵U的指数

max_iter = 100;  % {zd0}迭代次数

min_impro = 1e-5;  % 隶属度最小变化量,迭代终止条件

%%%--------初始化聚类中心----------

center=[Ag(83,45,1),Ag(25,47,1),Ag(132,245,1)];  %初始化聚类中心

dist=distfcm(center',labAg11);  %计算像素点到聚类中心的距离

tmp = dist.^(-2/(expo-1));

Ug = tmp./(ones(cluster_ng, 1)*sum(tmp));  %初始化隶属度矩阵

obj_fcn_Ag = zeros(3,max_iter); % 初始化输出参数obj_fcn_Ag

% ----------Main loop  主要循环--------

for i = 1:max_iter,

    %在第k步循环中改变聚类中心ceneter,和分配函数U的隶属度值;

 [Ug, center_Ag, obj_fcn_Ag(:,i)] = stepfcm(labAg11, Ug, cluster_ng, expo);

 if i > 1,

  if ((obj_fcn_Ag(1,i) - obj_fcn_Ag(1,i-1))^2+(obj_fcn_Ag(2,i) - obj_fcn_Ag(2,i-1))^2+(obj_fcn_Ag(3,i) - obj_fcn_Ag(3,i-1))^2)^1/2 < min_impro,

            break;

        end,

 end

end

%-----------将转换成一列的l通道的像素重新转换成数组------

x=size(Ug,2);

temp_Cg=zeros(m*n,4);

for i=1:x

    [ma ii]=max(Ug(:,i));

    temp_Cg(i,1)=ii;

end

Agd_num=col2im(temp_Cg(:,1),[m n],[m n],'distinct');

Agd_num1=Agd_num.*20;

figure(1);

subplot(212);image(Agd_num1);

<#--{zx1}日志--> <#--推荐日志--> <#--引用记录--> <#--相关日志--> <#--推荐日志--> <#--推荐阅读--> <#--相关文章 2010.04.29="" by="" yangfan--=""> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构-->
郑重声明:资讯 【图像l,a,b空间的l通道的模糊C均值聚类- 往事随风的日志- 网易博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——