模糊聚类的图像分割实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pp=cat(4,u1,u2,u3,u4,u5);
for i=1:maxX
for j=1:maxY
if max(pp(i,j,:))==u1(i,j)
IX2(i,j)=1;
elseif max(pp(i,j,:))==u2(i,j)
IX2(i,j)=2;
elseif max(pp(i,j,:))==u3(i,j)
IX2(i,j)=3;
elseif max(pp(i,j,:))==u4(i,j)
IX2(i,j)=4;
else
IX2(i,j)=5;
end
end
end
%判结束条件
if max(tmpMatrix)<0.0001
break;
else
cc1=ccc1;
cc2=ccc2;
cc3=ccc3;
cc4=ccc4;
模式识别中最关键的技术就是特征提取,模糊聚类不但能从原始数据中提取特征,而且还能对特征进行优化选择和降维;在提取特征之后,模糊聚类还可以提供最近邻原型分类器,以及进行空间划分和模糊规则的提取,帮助构造基于模糊IF-THEN规则的分类器;在物体识别和线条检测中,模糊聚类可以用于原始的数据上,也可用于变换域中.在模式识别的一些具体应用领域中,模糊聚类也取得了较好的结果,比如,汉字识别的字符预分类、语音识别中的分类和匹配等.
C-均值算法的隶属度要么是1,要么是0,这不能反映数据点与类中心的实际关系.为了处理这个问题,人们
引入了模糊集的概念.使用模糊数学理论的聚类算法被称为模糊聚类算法.自1969年Ruspini首先提出第1个解析的模糊聚类算法以来,已经有很多人提出了许多的模糊聚类算法.基于模糊划分的模糊聚类算法,其主要思想是将经典划分的定义模糊化,文献中主要有两种比较成功的思路来实现这种模糊化,一是在C-均值算法的目标函数中引入隶属度函数的权重指数,二是在C-均值算法目标函数中引入信息熵.
distance=distance.*distance+ree1;
daoShu=1./distance;
daoShu2=daoShu(:,:,1)+daoShu(:,:,2)+daoShu(:,:,3)+daoShu(:,:,4)+daoShu(:,:,5);
distance1=distance(:,:,1).*daoShu2;
ccc3=sum(sum(u3.*u3.*IM))/sum(sum(u3.*u3));
ccc4=sum(sum(u4.*u4.*IM))/sum(sum(u4.*u4));
ccc5=sum(sum(u5.*u5.*IM))/sum(sum(u5.*u5));
tmpMatrix=[abs(cc1-ccc1)/cc1,abs(cc2-ccc2)/cc2,abs(cc3-ccc3)/cc3,abs(cc4-ccc4)/cc4,abs(cc5-ccc5)/cc5];
else
IMMM(i,j)=25;
end
end
end
%显示每次聚类分割结果
figure(1);
imshow(uint8(IMMM));
end
for i=1:maxX
for j=1:maxY
if IX2(i,j)==5
IMMM(i,j)=240;
elseif IX2(i,j)==4
IMMM(i,j)=170;
(2)
在条件(2)下求式(1)的最小值,令 对 和 的偏导数为0,可得必要条件:
(3)
程序代码:
%function[IX2]=fcm(IM);
IM11=imread('1.jpg');
IM1=IM11(:,:,1);
%figure(1);
imshow(IM1);
IM=double(IM1);
[maxX,maxY]=size(IM);
elseif IX2(i,j)==3
IMMM(i,j)=125;
elseif IX2(i,j)==2
IMMM(i,j)=75;
else
IMMM(i,j)=25;
end
end
end
%显示最终分类结果
IMMM=uint8(IMMM);
figure(2);
imshow(IMMM);
%end
流程图:
三,算法步骤
cc5=ccc5;
end
for i=1:maxX
for j=1:maxY
if IX2(i,j)==5
IMMM(i,j)=240;
elseif IX2(i,j)==4
IMMM(i,j)=170;
elseif IX2(i,j)==3
IMMM(i,j)=125;
elseif IX2(i,j)==2
IMMM(i,j)=75;
IMM=cat(5,IM,IM,IM,IM,IM);
cc1=8;
cc2=50;
cc3=100;
cc4=150;
cc5=200;
ttFcm=百度文库;
while(ttFcm<15)
ttFcm=ttFcm+1
c1=repmat(cc1,maxX,maxY);
c2=repmat(cc2,maxX,maxY);
c3=repmat(cc3,maxX,maxY);
Step1:设置目标函数精度ε,模糊指数m(m通常取2),最大迭代次数 ;
Step2:初始化模糊聚类中心 ;
Step3:由(3)式更新模糊划分矩阵U={ }和聚类中心Z={ };
Step4:若|J(t)-J(t-1)|<ε或c> 则结束聚类;否则,t=t+1并转Step3;
Step5:由所得U={ }得到各像素点的分类结果。
c4=repmat(cc4,maxX,maxY);
c5=repmat(cc5,maxX,maxY);
c=cat(5,c1,c2,c3,c4,c5);
ree=repmat(0.000001,maxX,maxY);
ree1=cat(5,ree,ree,ree,ree,ree);
distance=IMM-c;
四,实验结果
原图:
实验结果图:
五,算法综述
模糊划分的概念最早由Ruspin于1969年提出的提出,利用这一概念人们提出了多种聚类方法。模糊聚类分析按照聚类过程的不同大致可以分为三大类:(l)基于模糊关系的分类法(2)基于目标函数的模糊聚类算法(3)基于神经网络的模糊聚类算法.
模糊聚类属于模式识别中的无监督学习,它不需要训练样本,可以直接通过机器学习达到自动分类的目的.
智能多媒体专业实验
实验一 模糊聚类的图像分割实验报告
一,实验目的
通过模糊c-均值(FCM)聚类实现图像的分割。
二,算法描述
动态聚类方法的目的是把n个样本划分到c个类别中的一个,使各样本与其所在类均值的误差平方和最小。FCM聚类算法的目标函数为:
Min (U,Z) = (1)
其中m>1是一个可以控制聚类结果的模糊程度的常数。在不同的隶属度定义方法下最小化式(1)的损失函数,就得到不同的模糊聚类方法。其中最有代表性的模糊C均值方法,要求一个样本对于各个聚类的隶属度之和为1,即
u1=1./distance1;
distance2=distance(:,:,2).*daoShu2;
u2=1./distance2;
distance3=distance(:,:,3).*daoShu2;
u3=1./distance3;
distance4=distance(:,:,4).*daoShu2;
u4=1./distance4;
distance5=distance(:,:,5).*daoShu2;
u5=1./distance5;
ccc1=sum(sum(u1.*u1.*IM))/sum(sum(u1.*u1));
ccc2=sum(sum(u2.*u2.*IM))/sum(sum(u2.*u2));
for i=1:maxX
for j=1:maxY
if max(pp(i,j,:))==u1(i,j)
IX2(i,j)=1;
elseif max(pp(i,j,:))==u2(i,j)
IX2(i,j)=2;
elseif max(pp(i,j,:))==u3(i,j)
IX2(i,j)=3;
elseif max(pp(i,j,:))==u4(i,j)
IX2(i,j)=4;
else
IX2(i,j)=5;
end
end
end
%判结束条件
if max(tmpMatrix)<0.0001
break;
else
cc1=ccc1;
cc2=ccc2;
cc3=ccc3;
cc4=ccc4;
模式识别中最关键的技术就是特征提取,模糊聚类不但能从原始数据中提取特征,而且还能对特征进行优化选择和降维;在提取特征之后,模糊聚类还可以提供最近邻原型分类器,以及进行空间划分和模糊规则的提取,帮助构造基于模糊IF-THEN规则的分类器;在物体识别和线条检测中,模糊聚类可以用于原始的数据上,也可用于变换域中.在模式识别的一些具体应用领域中,模糊聚类也取得了较好的结果,比如,汉字识别的字符预分类、语音识别中的分类和匹配等.
C-均值算法的隶属度要么是1,要么是0,这不能反映数据点与类中心的实际关系.为了处理这个问题,人们
引入了模糊集的概念.使用模糊数学理论的聚类算法被称为模糊聚类算法.自1969年Ruspini首先提出第1个解析的模糊聚类算法以来,已经有很多人提出了许多的模糊聚类算法.基于模糊划分的模糊聚类算法,其主要思想是将经典划分的定义模糊化,文献中主要有两种比较成功的思路来实现这种模糊化,一是在C-均值算法的目标函数中引入隶属度函数的权重指数,二是在C-均值算法目标函数中引入信息熵.
distance=distance.*distance+ree1;
daoShu=1./distance;
daoShu2=daoShu(:,:,1)+daoShu(:,:,2)+daoShu(:,:,3)+daoShu(:,:,4)+daoShu(:,:,5);
distance1=distance(:,:,1).*daoShu2;
ccc3=sum(sum(u3.*u3.*IM))/sum(sum(u3.*u3));
ccc4=sum(sum(u4.*u4.*IM))/sum(sum(u4.*u4));
ccc5=sum(sum(u5.*u5.*IM))/sum(sum(u5.*u5));
tmpMatrix=[abs(cc1-ccc1)/cc1,abs(cc2-ccc2)/cc2,abs(cc3-ccc3)/cc3,abs(cc4-ccc4)/cc4,abs(cc5-ccc5)/cc5];
else
IMMM(i,j)=25;
end
end
end
%显示每次聚类分割结果
figure(1);
imshow(uint8(IMMM));
end
for i=1:maxX
for j=1:maxY
if IX2(i,j)==5
IMMM(i,j)=240;
elseif IX2(i,j)==4
IMMM(i,j)=170;
(2)
在条件(2)下求式(1)的最小值,令 对 和 的偏导数为0,可得必要条件:
(3)
程序代码:
%function[IX2]=fcm(IM);
IM11=imread('1.jpg');
IM1=IM11(:,:,1);
%figure(1);
imshow(IM1);
IM=double(IM1);
[maxX,maxY]=size(IM);
elseif IX2(i,j)==3
IMMM(i,j)=125;
elseif IX2(i,j)==2
IMMM(i,j)=75;
else
IMMM(i,j)=25;
end
end
end
%显示最终分类结果
IMMM=uint8(IMMM);
figure(2);
imshow(IMMM);
%end
流程图:
三,算法步骤
cc5=ccc5;
end
for i=1:maxX
for j=1:maxY
if IX2(i,j)==5
IMMM(i,j)=240;
elseif IX2(i,j)==4
IMMM(i,j)=170;
elseif IX2(i,j)==3
IMMM(i,j)=125;
elseif IX2(i,j)==2
IMMM(i,j)=75;
IMM=cat(5,IM,IM,IM,IM,IM);
cc1=8;
cc2=50;
cc3=100;
cc4=150;
cc5=200;
ttFcm=百度文库;
while(ttFcm<15)
ttFcm=ttFcm+1
c1=repmat(cc1,maxX,maxY);
c2=repmat(cc2,maxX,maxY);
c3=repmat(cc3,maxX,maxY);
Step1:设置目标函数精度ε,模糊指数m(m通常取2),最大迭代次数 ;
Step2:初始化模糊聚类中心 ;
Step3:由(3)式更新模糊划分矩阵U={ }和聚类中心Z={ };
Step4:若|J(t)-J(t-1)|<ε或c> 则结束聚类;否则,t=t+1并转Step3;
Step5:由所得U={ }得到各像素点的分类结果。
c4=repmat(cc4,maxX,maxY);
c5=repmat(cc5,maxX,maxY);
c=cat(5,c1,c2,c3,c4,c5);
ree=repmat(0.000001,maxX,maxY);
ree1=cat(5,ree,ree,ree,ree,ree);
distance=IMM-c;
四,实验结果
原图:
实验结果图:
五,算法综述
模糊划分的概念最早由Ruspin于1969年提出的提出,利用这一概念人们提出了多种聚类方法。模糊聚类分析按照聚类过程的不同大致可以分为三大类:(l)基于模糊关系的分类法(2)基于目标函数的模糊聚类算法(3)基于神经网络的模糊聚类算法.
模糊聚类属于模式识别中的无监督学习,它不需要训练样本,可以直接通过机器学习达到自动分类的目的.
智能多媒体专业实验
实验一 模糊聚类的图像分割实验报告
一,实验目的
通过模糊c-均值(FCM)聚类实现图像的分割。
二,算法描述
动态聚类方法的目的是把n个样本划分到c个类别中的一个,使各样本与其所在类均值的误差平方和最小。FCM聚类算法的目标函数为:
Min (U,Z) = (1)
其中m>1是一个可以控制聚类结果的模糊程度的常数。在不同的隶属度定义方法下最小化式(1)的损失函数,就得到不同的模糊聚类方法。其中最有代表性的模糊C均值方法,要求一个样本对于各个聚类的隶属度之和为1,即
u1=1./distance1;
distance2=distance(:,:,2).*daoShu2;
u2=1./distance2;
distance3=distance(:,:,3).*daoShu2;
u3=1./distance3;
distance4=distance(:,:,4).*daoShu2;
u4=1./distance4;
distance5=distance(:,:,5).*daoShu2;
u5=1./distance5;
ccc1=sum(sum(u1.*u1.*IM))/sum(sum(u1.*u1));
ccc2=sum(sum(u2.*u2.*IM))/sum(sum(u2.*u2));