最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

【圖像分割】基于譜聚類算法實(shí)現(xiàn)圖像分割matlab源碼

2021-08-26 00:07 作者:Matlab工程師  | 我要投稿

?一. 前言

?

?

?

本來想寫關(guān)于聚類系列算法的介紹,但是聚類系列的其它幾個(gè)算法原理比較簡單,網(wǎng)上有大量的教程可以查閱。這里主要是介紹一下譜聚類算法,做一個(gè)學(xué)習(xí)筆記,同時(shí)也希望對想要了解該算法的朋友有一個(gè)幫助。關(guān)于聚類的其他系列算法,這里推薦一個(gè)寫的很不錯(cuò)的博客。

譜聚類在最近幾年變得受歡迎起來,主要原因就是它實(shí)現(xiàn)簡單,聚類效果經(jīng)常優(yōu)于傳統(tǒng)的聚類算法(如K-Means算法)。剛開始學(xué)習(xí)譜聚類的時(shí)候,給人的感覺就是這個(gè)算法看上去很難,但是當(dāng)真正的深入了解這個(gè)算法的時(shí)候,其實(shí)它的原理并不難,但是理解該算法還是需要一定的數(shù)學(xué)基礎(chǔ)的。如果掌握了譜聚類算法,會(huì)對矩陣分析,圖論和降維中的主成分分析等有更加深入的理解。

本文首先會(huì)簡單介紹一下譜聚類的簡單過程,然后再一步步的分解這些過程中的細(xì)節(jié)以及再這些過程中譜聚類是如何實(shí)現(xiàn)的,接著總結(jié)一下譜聚類的幾個(gè)算法,再接著介紹譜聚類算法是如何用圖論知識(shí)來描述,最后對本文做一個(gè)總結(jié)。下面我們就來介紹一下譜聚類的基本原理。

二. 譜聚類的基本原理介紹

2.1 譜和譜聚類

2.1.1 譜

方陣作為線性算子,它的所有特征值的全體統(tǒng)稱為方陣的譜。方陣的譜半徑為最大的特征值。矩陣A的譜半徑是矩陣

的最大特征值。

2.1.2 譜聚類

譜聚類是一種基于圖論的聚類方法,通過對樣本數(shù)據(jù)的拉普拉斯矩陣的特征向量進(jìn)行聚類,從而達(dá)到對樣本數(shù)據(jù)聚類的母的。譜聚類可以理解為將高維空間的數(shù)據(jù)映射到低維,然后在低維空間用其它聚類算法(如KMeans)進(jìn)行聚類。

2.2 譜聚類算法簡單描述

輸入:n個(gè)樣本點(diǎn)

和聚類簇的數(shù)目k;

輸出:聚類簇

(1)使用下面公式計(jì)算

的相似度矩陣W;

W為

組成的相似度矩陣。

(2)使用下面公式計(jì)算度矩陣D;

,即相似度矩陣W的每一行元素之和

D為

組成的

對角矩陣。

(3)計(jì)算拉普拉斯矩陣

;

(4)計(jì)算L的特征值,將特征值從小到大排序,取前k個(gè)特征值,并計(jì)算前k個(gè)特征值的特征向量

;

(5)將上面的k個(gè)列向量組成矩陣

(6)令

的第

行的向量,其中

;

(7)使用k-means算法將新樣本點(diǎn)

聚類成簇

(8)輸出簇

,其中,

.

上面就是未標(biāo)準(zhǔn)化的譜聚類算法的描述。也就是先根據(jù)樣本點(diǎn)計(jì)算相似度矩陣,然后計(jì)算度矩陣和拉普拉斯矩陣,接著計(jì)算拉普拉斯矩陣前k個(gè)特征值對應(yīng)的特征向量,最后將這k個(gè)特征值對應(yīng)的特征向量組成

的矩陣U,U的每一行成為一個(gè)新生成的樣本點(diǎn),對這些新生成的樣本點(diǎn)進(jìn)行k-means聚類,聚成k類,最后輸出聚類的結(jié)果。這就是譜聚類算法的基本思想。相比較PCA降維中取前k大的特征值對應(yīng)的特征向量,這里取得是前k小的特征值對應(yīng)的特征向量。但是上述的譜聚類算法并不是最優(yōu)的,接下來我們一步一步的分解上面的步驟,總結(jié)一下在此基礎(chǔ)上進(jìn)行優(yōu)化的譜聚類的版本。

2.3 譜聚類算法中的重要屬性

2.3.1 相似度矩陣介紹

相似度矩陣就是樣本點(diǎn)中的任意兩個(gè)點(diǎn)之間的距離度量,在聚類算法中可以表示為距離近的點(diǎn)它們之間的相似度比較高,而距離較遠(yuǎn)的點(diǎn)它們的相似度比較低,甚至可以忽略。這里用三種方式表示相似度矩陣:一是

-近鄰法(

-neighborhood graph),二是k近鄰法(k-nearest nerghbor graph),三是全連接法(fully connected graph)。下面我們來介紹這三種方法。

(1)

-neighborhood graph:

,表示樣本點(diǎn)中任意兩點(diǎn)之間的歐式距離

用此方法構(gòu)造的相似度矩陣表示如下:

該相似度矩陣由于距離近的點(diǎn)的距離表示為

,距離遠(yuǎn)的點(diǎn)距離表示為0,矩陣種沒有攜帶關(guān)于數(shù)據(jù)集的太多的信息,所以該方法一般很少使用,在sklearn中也沒有使用該方法。

(2)k-nearest nerghbor graph:

由于每個(gè)樣本點(diǎn)的k個(gè)近鄰可能不是完全相同的,所以用此方法構(gòu)造的相似度矩陣并不是對稱的。因此,這里使用兩種方式表示對稱的knn相似度矩陣,第一種方式是如果

的k個(gè)領(lǐng)域中或者

的k個(gè)領(lǐng)域中,則

之間的距離,否則為

;第二種方式是如果

的k個(gè)領(lǐng)域中并且

的k個(gè)領(lǐng)域中,則

之間的距離,否則為

。很顯然第二種方式比第一種方式生成的相似度矩陣要稀疏。這兩種方式用公式表達(dá)如下:

第一種方式:

第二種方式:

(3)fully connected graph:

該方法就是在算法描述中的高斯相似度方法,公式如下:

該方法也是最常用的方法,在sklearn中默認(rèn)的也是該方法,表示任意兩個(gè)樣本點(diǎn)都有相似度,但是距離較遠(yuǎn)的樣本點(diǎn)之間相似度較低,甚至可以忽略。這里面的參數(shù)

控制著樣本點(diǎn)的鄰域?qū)挾?,?/p>

越大表示樣本點(diǎn)與距離較遠(yuǎn)的樣本點(diǎn)的相似度越大,反之亦然。

2.3.2 拉普拉斯矩陣介紹

對于譜聚類來說最重要的工具就是拉普拉斯矩陣了,下面我們來介紹拉普拉斯矩陣的三種表示方法。

(1)未標(biāo)準(zhǔn)化的拉普拉斯矩陣:

未標(biāo)準(zhǔn)化的拉普拉斯矩陣定義如下:

其中W是上節(jié)所說的相似度矩陣,D是度矩陣,在算法描述中有介紹。很顯然,W與D都是對稱矩陣。

未標(biāo)準(zhǔn)化的拉普拉斯矩陣L滿足下面幾個(gè)性質(zhì):

(a)對任意一個(gè)向量

都有:

證明如下:

(b)L是對稱的和半正定的,證明如下:

因?yàn)?/p>

,所以

,所以為半正定矩陣。由于W和D都是對稱矩陣,所以L為對稱矩陣。

(c)L最小的特征值為0,且特征值0所對應(yīng)的特征向量為全1向量,證明如下:

表示

的全1向量,則

由D和W的定義可以得出上式。

(d)L有n個(gè)非負(fù)的實(shí)數(shù)特征值:

(2)標(biāo)準(zhǔn)化拉普拉斯矩陣

標(biāo)準(zhǔn)化拉普拉斯矩陣有兩種表示方法,一是基于隨機(jī)游走(Random Walk)的標(biāo)準(zhǔn)化拉普拉斯矩陣

和對稱標(biāo)準(zhǔn)化拉普拉斯矩陣

,定義如下:

標(biāo)準(zhǔn)化的拉普拉斯矩陣滿足如下性質(zhì):

(a)對任意一個(gè)向量

都有:

(b)當(dāng)且僅當(dāng)

的特征值,對應(yīng)的特征向量為

時(shí),則

特征值,對應(yīng)的特征向量為u;

(c)當(dāng)且僅當(dāng)

時(shí),

的特征值,對應(yīng)的特征向量為u;

(d)0是

的特征值,對應(yīng)的特征向量為

的全1向量;0也是

的特征值,對應(yīng)的特征向量為

;

(e)

是半正定矩陣并且有非負(fù)實(shí)數(shù)特征值:

.

關(guān)于各個(gè)版本的譜聚類算法的不同之處,就是在于相似度矩陣的計(jì)算方式不同和拉普拉斯矩陣的表示方法不同,其它步驟基本相同。下面就來介紹關(guān)于譜聚類的兩個(gè)比較流行的標(biāo)準(zhǔn)化算法。

2.4 標(biāo)準(zhǔn)化譜聚類算法介紹

2.4.1 隨機(jī)游走拉普拉斯矩陣的譜聚類算法描述

輸入:n個(gè)樣本點(diǎn)

和聚類簇的數(shù)目k;

輸出:聚類簇

(1)計(jì)算

的相似度矩陣W;

(2)計(jì)算度矩陣D;

(3)計(jì)算拉普拉斯矩陣

;

(4)計(jì)算

的特征值,將特征值從小到大排序,取前k個(gè)特征值,并計(jì)算前k個(gè)特征值的特征向量

;

(5)將上面的k個(gè)列向量組成矩陣

,

(6)令

的第

行的向量,其中

;

(7)使用k-means算法將新樣本點(diǎn)

聚類成簇

;

(8)輸出簇

,其中,

.

2.4.2 對稱拉普拉斯矩陣的譜聚類算法描述

輸入:n個(gè)樣本點(diǎn)

和聚類簇的數(shù)目k;

輸出:聚類簇

(1)計(jì)算

的相似度矩陣W;

(2)計(jì)算度矩陣D;

(3)計(jì)算拉普拉斯矩陣

(4)計(jì)算

的特征值,將特征值從小到大排序,取前k個(gè)特征值,并計(jì)算前k個(gè)特征值的特征向量

;

(5)將上面的k個(gè)列向量組成矩陣

,

;

(6)令

的第

行的向量,其中

;

(7)對于

,將

依次單位化,使得

;

(8)使用k-means算法將新樣本點(diǎn)

聚類成簇

(9)輸出簇

,其中,

.

上面兩個(gè)標(biāo)準(zhǔn)化拉普拉斯算法加上未標(biāo)準(zhǔn)化拉普拉斯算法這三個(gè)算法中,主要用到的技巧是將原始樣本點(diǎn)

轉(zhuǎn)化為新的樣本點(diǎn)

,然后再對新樣本點(diǎn)使用其它的聚類算法進(jìn)行聚類,在這里最后一步用到的聚類算法不一定非要是KMeans算法,也可以是其它的聚類算法,具體根據(jù)實(shí)際情況而定。在sklearn中默認(rèn)是使用KMeans算法,但是由于KMeans聚類對初始聚類中心的選擇比較敏感,從而導(dǎo)致KMeans算法不穩(wěn)定,進(jìn)而導(dǎo)致譜聚類算法不穩(wěn)定,所以在sklearn中有另外一個(gè)可選項(xiàng)是'discretize',該算法對初始聚類中心的選擇不敏感。

三. 用切圖的觀點(diǎn)來解釋譜聚類

聚類算法給我們的直觀上的感覺就是根據(jù)樣本點(diǎn)的相似性將他們劃分成不同的組,使得在相同組內(nèi)的數(shù)據(jù)點(diǎn)是相似的,不同組之間的數(shù)據(jù)點(diǎn)是不相似的。對于給定的樣本點(diǎn)計(jì)算相似度,形成相似度圖,因而譜聚類的問題可以被重新描述如下:我們想要找到圖形的一個(gè)分區(qū),使得不同分區(qū)之間的邊具有非常低的權(quán)重(這意味著不同分區(qū)中的點(diǎn)彼此不相似)并且分區(qū)內(nèi)的邊具有高權(quán)重(這意味著其中的點(diǎn)彼此相似)。在這個(gè)小節(jié)我們將討論如何推導(dǎo)譜聚類為近似的圖分區(qū)的問題。

3.1 最小切(mincut)

對于無向圖G,我們的目標(biāo)是將圖

切成互相沒有連接的子圖,每個(gè)子圖點(diǎn)的集合為

,其中

。

對于任意兩個(gè)子圖點(diǎn)的集合

,

,我們定義A和B之間的權(quán)重切圖為:

對于k個(gè)子圖集合

,我們定義切圖cut為:

其中,

為A的補(bǔ)集。

我們可以想到的切圖方法就是最小化上式,也就是使各個(gè)組之間的權(quán)重盡可能的小,但是在許多情況下mincut只是簡單的將圖中的一個(gè)定點(diǎn)與其余的頂點(diǎn)分開,在并不是我們想要的結(jié)果,合理的切分結(jié)果應(yīng)該是組內(nèi)的樣本點(diǎn)盡可能的多。所以mincut在實(shí)際中并不常用。下面我們介紹另外兩個(gè)切圖方式RatioCut和Ncut。

3.2 RatioCut切圖

在RatioCut切圖中,不僅要考慮使不同組之間的權(quán)重最小化,也考慮了使每個(gè)組中的樣本點(diǎn)盡量多。

定義

為子集A中的頂點(diǎn)個(gè)數(shù),RatioCut的表達(dá)式如下:

將圖中頂點(diǎn)V分成k個(gè)分區(qū)

,我們定義指示向量為:

,其中:

我們令

為包含k個(gè)指示向量作為列向量的矩陣,注意到H的列向量彼此正交,即

,然后我們計(jì)算下式:

,證明如下:

結(jié)合上面可以得到:

其中Tr(A)表示矩陣A的跡,也就是矩陣A的對角線之和。

所以我們此時(shí)的目標(biāo)函數(shù)成為:

,約束條件為:

注意到我們H矩陣?yán)锩娴拿恳粋€(gè)指示向量都是n維的,向量中每個(gè)變量的取值為0或者

,就有

種取值,有k個(gè)子圖的話就有k個(gè)指示向量,共有

種H,因此找到滿足上面優(yōu)化目標(biāo)的H是一個(gè)NP難的問題。那么是不是就沒有辦法了呢?

注意觀察

中每一個(gè)優(yōu)化子目標(biāo)

,其中

是單位正交基,

為對稱矩陣。在PCA中,我們的目標(biāo)是找到協(xié)方差矩陣(對應(yīng)此處的拉普拉斯矩陣L)的最大的特征值,而在我們的譜聚類中,我們的目標(biāo)是找到目標(biāo)的最小的特征值,得到對應(yīng)的特征向量,此時(shí)對應(yīng)二分切圖效果最佳。也就是說,我們這里要用到維度規(guī)約的思想來近似去解決這個(gè)NP難的問題。

對于

,我們的目標(biāo)是找到最小的L的特征值,而對于

,則我們的目標(biāo)就是找到k個(gè)最小的特征值,一般來說,k遠(yuǎn)遠(yuǎn)小于n,也就是說,此時(shí)我們進(jìn)行了維度規(guī)約,將維度從n降到了k,從而近似可以解決這個(gè)NP難的問題。

通過找到L的最小的k個(gè)特征值,可以得到對應(yīng)的k個(gè)特征向量,這k個(gè)特征向量組成一個(gè)nxk維度的矩陣,即為我們的H。一般需要對H矩陣按行做標(biāo)準(zhǔn)化,即

由于我們在使用維度規(guī)約的時(shí)候損失了少量信息,導(dǎo)致得到的優(yōu)化后的指示向量h對應(yīng)的H現(xiàn)在不能完全指示各樣本的歸屬,因此一般在得到nxk維度的矩陣H后還需要對每一行進(jìn)行一次傳統(tǒng)的聚類,比如使用K-Means聚類。

3.3 Ncut切圖

Ncut在最小化損失函數(shù)之外,還考慮了子圖之間的權(quán)重大小。Ncut切圖與Ratiocut類似,只是把RatioCut分母中的

替換成了

,其中:

由于子圖樣本的個(gè)數(shù)多并不一定權(quán)重就大,我們切圖時(shí)基于權(quán)重也更合我們的目標(biāo),因此一般來說Ncut切圖優(yōu)于RatioCut切圖。所以Ncut的目標(biāo)函數(shù)如下:

,證明同上

在Ncut中使用子圖權(quán)重

來表示指示向量h,定義如下:

我們的優(yōu)化目標(biāo)函數(shù)是:

但是此時(shí)我們的

,而是

。推導(dǎo)如下:

也就是說,此時(shí)我們的優(yōu)化目標(biāo)最終為:

約束條件:

,則問題變成如下形式:

約束條件為:

可以發(fā)現(xiàn)這個(gè)式子和RatioCut基本一致,只是中間的L變成了

。這樣我們就可以繼續(xù)按照RatioCut的思想,求出

的最小的前k個(gè)特征值,然后求出對應(yīng)的特征向量,并標(biāo)準(zhǔn)化,得到最后的特征矩陣

,最后對

進(jìn)行一次傳統(tǒng)的聚類(比如K-Means)即可。

一般來說,

相當(dāng)于對拉普拉斯矩陣

做了一次標(biāo)準(zhǔn)化,即

,所以Ncut會(huì)產(chǎn)生標(biāo)準(zhǔn)化的譜聚類,而RatioCut會(huì)產(chǎn)生未標(biāo)準(zhǔn)化的譜聚類。

四. 譜聚類算法的優(yōu)缺點(diǎn)

4.1 優(yōu)點(diǎn)

(1)當(dāng)聚類的類別個(gè)數(shù)較小的時(shí)候,譜聚類的效果會(huì)很好,但是當(dāng)聚類的類別個(gè)數(shù)較大的時(shí)候,則不建議使用譜聚類;

(2)譜聚類算法使用了降維的技術(shù),所以更加適用于高維數(shù)據(jù)的聚類;

(3)譜聚類只需要數(shù)據(jù)之間的相似度矩陣,因此對于處理稀疏數(shù)據(jù)的聚類很有效。這點(diǎn)傳統(tǒng)聚類算法(比如K-Means)很難做到

(4)譜聚類算法建立在譜圖理論基礎(chǔ)上,與傳統(tǒng)的聚類算法相比,它具有能在任意形狀的樣本空間上聚類且收斂于全局最優(yōu)解

4.2 缺點(diǎn)

(1)譜聚類對相似度圖的改變和聚類參數(shù)的選擇非常的敏感;

(2)譜聚類適用于均衡分類問題,即各簇之間點(diǎn)的個(gè)數(shù)相差不大,對于簇之間點(diǎn)個(gè)數(shù)相差懸殊的聚類問題,譜聚類則不適用;


close all clear all clc; %讀入一副圖像 % ?global slide_window interpixel_distance qutity_level k tic %讀圖 I=imread('oil3-01.jpg'); % I=rgb2gray(I); figure,imshow(I); I1=double(I); % ?I1=rgb2gray(I1); L=harrl(I1); LL=harrll(L); matrix=LL; II=mat2gray(matrix); figure,imshow(II); II=matrix(:); m=size(II,1); %聚類數(shù) k=2; Delta=0.0012; d=zeros(m,m); W=zeros(m,m);%尺度系數(shù) for i=1:m ? ?for j=1:m ? ? ? ?d(i,j)=abs(II(i)-II(j))^2; ? ? ? ?W(i,j)=exp(-d(i,j)/2*Delta^2); ? ?end end ? ? ?% W=affiliate(ent,Delta); Y=cut(W); Y=Y(:,2); % matrix=mat2gray(Y); % MATRIX=reshape(matrix,[60,60]); % figure,imshow(MATRIX); % imwrite(MATRIX,'featureIMAGE'); Y=Y./sum(Y); %Y=Y'; % plot(m,n) %T=0.5*(max(Y)+min(Y)); %while true % ? g=Y>=T; % ?Tn=0.5*(mean(Y(g)+mean(Y(~g)))); % done=abs(T-Tn)<0.1; % ?T=Tn; % end % ?figure,imshow(image); label_matrix1=k_meanclusterings(Y,k); label_matrix2=reshape(label_matrix1,64,64); label_map=label2rgb(label_matrix2); figure,imshow(label_map); imwrite(label_map,'oil3-02.jpg'); toc % im_matric=label_matrix; % ?im_matric1=reshape(im_matric,[m,n]); %label_map=mat2gray(im_matric1); %figure,imshow(label_map);



【圖像分割】基于譜聚類算法實(shí)現(xiàn)圖像分割matlab源碼的評論 (共 條)

分享到微博請遵守國家法律
阿拉善右旗| 富蕴县| 邓州市| 梨树县| 博罗县| 德江县| 华容县| 阿城市| 三原县| 东平县| 板桥市| 盐城市| 花垣县| 南皮县| 房产| 绿春县| 名山县| 麻城市| 新河县| 青河县| 和平区| 庄浪县| 哈尔滨市| 沁水县| 波密县| 五原县| 浪卡子县| 南投县| 丽水市| 平山县| 华蓥市| 高台县| 平邑县| 剑河县| 莎车县| 罗山县| 龙州县| 宜宾县| 临沧市| 舟曲县| 东山县|