Meanshift,聚類算法(轉)


原帖地址:http://www.cnblogs.com/liqizhou/archive/2012/05/12/2497220.html

 

記得剛讀研究生的時候,學習的第一個算法就是meanshift算法,所以一直記憶猶新,今天和大家分享一下Meanshift算法,如有錯誤,請在線交流。

Mean Shift算法,一般是指一個迭代的步驟,即先算出當前點的偏移均值,移動該點到其偏移均值,然后以此為新的起始點,繼續移動,直到滿足一定的條件結束.

1. Meanshift推導

給定d維空間Rd的n個樣本點 ,i=1,…,n,在空間中任選一點x,那么Mean Shift向量的基本形式定義為:                            

Sk是一個半徑為h的高維球區域,滿足以下關系的y點的集合,

k表示在這n個樣本點xi中,有k個點落入Sk區域中.

    以上是官方的說法,即書上的定義,我的理解就是,在d維空間中,任選一個點,然后以這個點為圓心,h為半徑做一個高維球,因為有d維,d可能大於2,所以是高維球。落在這個球內的所有點和圓心都會產生一個向量,向量是以圓心為起點落在球內的點位終點。然后把這些向量都相加。相加的結果就是Meanshift向量

如圖所以。其中黃色箭頭就是Mh(meanshift向量)。

再以meanshift向量的終點為圓心,再做一個高維的球。如下圖所以,重復以上步驟,就可得到一個meanshift向量。如此重復下去,meanshift算法可以收斂到概率密度最大得地方。也就是最稠密的地方

最終的結果如下:

Meanshift推導:

把基本的meanshift向量加入核函數,核函數的性質在這篇博客介紹:http://www.cnblogs.com/liqizhou/archive/2012/05/11/2495788.html

那么,meanshift算法變形為

                                                         (1)

解釋一下K()核函數,h為半徑,Ck,d/nh為單位密度,要使得上式f得到最大,最容易想到的就是對上式進行求導,的確meanshift就是對上式進行求導.

(2)            

令:

K(x)叫做g(x)的影子核,名字聽上去聽深奧的,也就是求導的負方向,那么上式可以表示

對於上式,如果才用高斯核,那么,第一項就等於fh,k

第二項就相當於一個meanshift向量的式子:

那么(2)就可以表示為

下圖分析的構成,如圖所以,可以很清晰的表達其構成。

要使得=0,當且僅當=0,可以得出新的圓心坐標:

                          (3)

上面介紹了meanshift的流程,但是比較散,下面具體給出它的算法流程。

  1. 選擇空間中x為圓心,以h為半徑為半徑,做一個高維球,落在所有球內的所有點xi
  2. 計算,如果<ε(人工設定),推出程序。如果>ε, 則利用(3)計算x,返回1.

2.meanshift在圖像上的聚類:

真正大牛的人就能創造算法,例如像meanshift,em這個樣的算法,這樣的創新才能推動整個學科的發展。還有的人就是把算法運用的實際的運用中,推動整個工業進步,也就是技術的進步。下面介紹meashift算法怎樣運用到圖像上的聚類核跟蹤。

一般一個圖像就是個矩陣,像素點均勻的分布在圖像上,就沒有點的稠密性。所以怎樣來定義點的概率密度,這才是最關鍵的。

如果我們就算點x的概率密度,采用的方法如下:以x為圓心,以h為半徑。落在球內的點位xi   定義二個模式規則。

(1)x像素點的顏色與xi像素點顏色越相近,我們定義概率密度越高。

(2)離x的位置越近的像素點xi,定義概率密度越高。

所以定義總的概率密度,是二個規則概率密度乘積的結果,可以(4)表示

(4)

其中:代表空間位置的信息,離遠點越近,其值就越大,表示顏色信息,顏色越相似,其值越大。如圖左上角圖片,按照(4)計算的概率密度如圖右上。利用meanshift對其聚類,可得到左下角的圖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM