|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
6 r8 C/ U/ O$ ?; Q
一、简介$ o7 t7 ^. [" E" d& [, W* y
伴随着模糊集理论的形成、发展和深化,RusPini率先提出模糊划分的概念。以此为起点和基础,模糊聚类理论和方法迅速蓬勃发展起来。针对不同的应用,人们提出了很多模糊聚类算法,比较典型的有基于相似性关系和模糊关系的方法、基于模糊等价关系的传递闭包方法、基于模糊图论的最大支撑树方法,以及基于数据集的凸分解、动态规划和难以辨别关系等方法。然而,上述方法均不能适用于大数据量的情况,难以满足实时性要求较高的场合,因此实际应用并不广泛。: z4 {( @# k* U d+ L
1 F$ d/ h$ o- @( }. Y4 H0 f模糊聚类分析按照聚类过程的不同大致可以分为三大类:
- b4 l+ E( a4 Y! h' Y2 z$ z' [2 ], F& C/ b! ]% q) d! C1 ~
(1)基于模糊关系的分类法:其中包括谱系聚类算法(又称系统聚类法)、基于等价关系的聚类算法、基于相似关系的聚类算法和图论聚类算法等等。它是研究比较早的一种方法,但是由于它不能适用于大数据量的情况,所以在实际中的应用并不广泛。 M" _! i4 e8 u1 |- q; C, C y3 o( J
* Y9 z- \8 M4 o% R) O; E/ s2 Y(2)基于目标函数的模糊聚类算法:该方法把聚类分析归结成一个带约束的非线性规划问题,通过优化求解获得数据集的最优模糊划分和聚类。该方法设计简单、解决问题的范围广,还可以转化为优化问题而借助经典数学的非线性规划理论求解,并易于计算机实现。因此,随着计算机的应用和发展,基于目标函数的模糊聚类算法成为新的研究热点。
3 r5 `4 Q0 r8 n. ]% Q7 @9 N& L+ S+ f4 ?: n9 ~7 Z# Q
(3)基于神经网络的模糊聚类算法:它是兴起比较晚的一种算法,主要是采用竞争学习算法来指导网络的聚类过程。( r' n7 }7 m3 x0 h& m1 R
+ T, b2 q o7 y
在介绍算法之前,先介绍下模糊集合的知识。
/ {+ T( S P3 t' m' ?* n
! _4 K( z0 _5 m1 g/ V( x. g+ iHCM聚类算法
8 G$ d6 h7 d% `) l; @. B
. ^1 m1 }( I1 J- b) D' `- 首先说明隶属度函数的概念。隶属度函数是表示一个对象x 隶属于集合A 的程度的函数,通常记做μA(x),其自变量范围是所有可能属于集合A 的对象(即集合A 所在空间中的所有点),取值范围是[0,1],即0<=μA(x),μA(x)<=1。μA(x)=1 表示x 完全隶属于集合A,相当于传统集合概念上的x∈A。一个定义在空间X={x}上的隶属度函数就定义了一个模糊集合A,或者叫定义在论域X={x}上的模糊子集A’。对于有限个对象x1,x2,……,xn 模糊集合A’可以表示为:
4 }$ k! {6 |& _' ^
; T9 W( W. K9 Q' X
4 c- f8 [4 v, s6 F
0 b( t3 P% t# ^+ V+ i$ T" F0 _8 N+ A
9 ^. J% v2 n t3 `* n7 i9 g
' Q# w, j$ b& a
* q' R: I& E. j* e9 l# o
2 F }% e+ d# {- e% v, q# ]
/ v' {, b, K" {3 L9 q
1 c. V: o" W' J7 _5 B' a
6 H) K" o0 ?" J
/ [: W& h. f, u& d
7 R" P H8 k7 o- j2 _! ~( g2 P
FCM算法流程图
, O: K, A& i5 c! a
7 L* d3 y" L3 F9 s* c' kFCM算法是目前比较流行的一种模糊聚类算法,究其原因大致有以下几个方面:首先,模糊C—均值泛函Jm仍是传统硬C一均值泛函J1的自然推广;硬C一均值泛函J1是一个应用十分广泛的聚类准则,对其在理论上的研究己经相当完善,这就为Jm的研究提供了良好的条件;数学上看,Jm与RS的希尔伯特空间结构(正交投影和均方逼近理论)有密切的关系,因此比其它泛函有更深厚的数学基础;最后,也是最重要的是该目标函数不仅在许多领域获得了非常成功的应用,而且以FCM算法为基础,人们提出的基于其它原型的模糊聚类算法,形成了一大批FCM类型的算法:如模糊C一线(FCL)、模糊C一面(FCP)等聚类算法,分别实现了对呈线状、超平面状结构模式子集(或聚类)的检测。
2 C0 U# q# x# N3 p4 J2 K
/ l4 s" w' @7 b* [3 M2 s: N9 w! K' `' _( P
FCM算法应用到颜色迁移中4 L4 A+ J' o# l; R" a' G' R8 D* f
, h! ^2 e1 \! f& f/ H9 G
- 钱小燕等人将聚类算法应用到色彩迁移中,提出了一种基于图像模糊颜色聚类的自适应色彩迁移算法。该算法首先将源图像和目标图像分别转换到lαβ颜色空间:利用FCM 算法把源图像和目标图像划分为具有不同颜色特征的聚类,然后分析图像中的颜色特征:分别算出每个域的匹配权值,对每个目标图像的匹配权值,从源图像中选取一个最接近域作为最佳匹配域;最后根据目标图像各聚类域与源图像中的匹配域之间的关系,引入隶属度因子,两个域的处理结果分别进行加权平均,获得色彩迁移结果。使用FCM的思想对图像进行聚类域划分的思路是:设准备处理图像I的大小是S×H,即对颜色聚类颜色分析的个数是N,N = S×H,则图像I可表示成集合,I={p1 ,p2 ...,pn }。图像被分为c类,每个类的聚类中心为V={v1,v2 ...,vc },用uik表示像素pk隶属于聚类中心Vi的隶属度,定义图像的隶属度矩阵U。具体算法如下: k/ P+ ^" J6 \/ Q- j) o
/ o- c) |) t4 q7 I' Y' E: l' N
" M0 h$ s! _# H" c( o1 m
) h8 ?+ Q0 x, i/ S& X) U步骤一:把源图像和目标图像分别从RGB转换到lαβ空间。+ e# o2 `! ^ w/ C0 o0 }& L4 B
; p- P ^5 m' v: J8 A/ Z
步骤二:确定待处理图像聚类域个数c,然后初始化聚类中心。假设加权指数m=2,设定处理的最大迭代次数为50。* N; w" ^. |% k1 K5 @& v- T
5 M3 V% e/ |! m8 v3 J9 c- O
步骤三:当迭代次数T 小于50 时,根据初始化聚类中心计算隶属度矩阵。如果pk≠vi,则对于所有的vi ( i=1,2,…,C ),利用下式计算隶属度矩阵。1 w, b( g8 {# v7 o% ^7 x; a7 X
\' L! d* b% f
, C! B/ P6 m1 c% j2 T
0 y3 m/ ?* I7 A& W# j+ L8 w7 o
' r8 O: C5 |7 _9 ]: J; {6 q
5 k" c& ?# @; p5 ?8 I" Y$ E* R
& h# A7 u$ Y: \* p7 T4 w1 w
* b) l5 ^ U9 T( N* t [
二、源代码
$ E! }2 ~& v/ W3 R5 L+ M. v: o
3 @; i' o; @ |4 p/ H4 [2 h- %% 程序分享
- %--------------------------------------
- clear
- close all
- clc
- %% %%%%%%%%%%%%%%%图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- I=imread('3096.jpg');
- if size(I,3) == 3
- I=rgb2gray(I);
- else
- end
- I=im2double(I);
- figure;imshow(I);title('(a)原始图像')
- % I=I;%不加噪声
- %I=imnoise(I,'speckle',deta_2);
- % I=imnoise(I,'salt & pepper',0.05); %加噪图
- % I=imnoise(I,'gaussian',0,0.01); % 加高斯噪声
- figure;imshow(I);title('(b)加噪图像');
- imwrite(I,'2.jpg');
- [m,n]=size(I);
- %k 聚类数目
- k=2;
- % k=3;
- I4 = I(:); %% 将图像灰度按列排列
- %% ------------------------ fcm算法------------------------
- fcm_spatial_mean_label=zeros(m*n,1);
- t=cputime;
- tic;
- [O2, U2, obj_fcn2] = fcm(I4, k);
- toc;
- time_fcm_spatial_mean=cputime-t;
- %% 最大隶属度原则
- maxU2 = max(U2); %隶属度最大
- for j=1:k
- index = find(U2(j, :) == maxU2); %隶属度最大对应的像素位置
- fcm_spatial_mean_label(index) = j;
- end
- labels2=reshape(fcm_spatial_mean_label,[m n]);
- labels2=uint16(labels2);
- %% 显示聚类分割图
- labels2(find(labels2==1))=0;
- labels2(find(labels2==2))=255;
- labels2(find(labels2==3))=180;
- labels2(find(labels2==4))=100;
- labels2=uint8(labels2);
- figure;imshow(labels2,[]);title('(c)聚类分割图');
- imwrite(labels2,'3.1.tiff','tiff','Resolution',300);%输出结果,保存为tif图片
7 b- C( q: d' W3 X1 s" k, Q: w
8 E( O* `" K8 U6 P- U1 t6 ~5 w" Y' V: ] V4 q9 N
* _/ N* }$ s9 P
三、运行结果3 B& G/ A- E2 d1 t6 q6 x
( ] T; H! x" H7 Q, ?' R
& A! h! M$ j, X) w. C7 R, T7 [- S& G+ L
4 h7 A5 L" s# S5 w& _( G/ d
7 G3 M: s5 _% o5 y1 n, l4 w% [5 q5 Q. }8 B8 u" s6 Q
1 p. C0 [0 h, N* l' z; V# ?
|
|