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

http://blog.sina.com.cn/s/blog_50a6faf80100as9k.html

(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 、最大迭代次数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维特征值

  U           ---- 隶属度矩阵

  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;  % 最大迭代次数

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值