記得剛讀研究生的時候,學習的第一個算法就是meanshift算法,因此一直記憶猶新,今天和你們分享一下Meanshift算法,若有錯誤,請在線交流。html
Mean Shift算法,通常是指一個迭代的步驟,即先算出當前點的偏移均值,移動該點到其偏移均值,而後以此爲新的起始點,繼續移動,直到知足必定的條件結束.算法
給定d維空間Rd的n個樣本點 ,i=1,…,n,在空間中任選一點x,那麼Mean Shift向量的基本形式定義爲: 函數
Sk是一個半徑爲h的高維球區域,知足如下關係的y點的集合,學習
k表示在這n個樣本點xi中,有k個點落入Sk區域中.spa
以上是官方的說法,即書上的定義,個人理解就是,在d維空間中,任選一個點,而後以這個點爲圓心,h爲半徑作一個高維球,由於有d維,d可能大於2,因此是高維球。落在這個球內的全部點和圓心都會產生一個向量,向量是以圓心爲起點落在球內的點位終點。而後把這些向量都相加。相加的結果就是Meanshift向量。3d
如圖因此。其中黃色箭頭就是Mh(meanshift向量)。htm
再以meanshift向量的終點爲圓心,再作一個高維的球。以下圖因此,重複以上步驟,就可獲得一個meanshift向量。如此重複下去,meanshift算法能夠收斂到機率密度最大得地方。也就是最稠密的地方。blog
最終的結果以下:圖片
Meanshift推導:get
把基本的meanshift向量加入核函數,核函數的性質在這篇博客介紹:http://www.cnblogs.com/liqizhou/archive/2012/05/11/2495788.html
那麼,meanshift算法變形爲
(1)
解釋一下K()核函數,h爲半徑,Ck,d/nhd 爲單位密度,要使得上式f獲得最大,最容易想到的就是對上式進行求導,的確meanshift就是對上式進行求導.
(2)
令:
K(x)叫作g(x)的影子核,名字聽上去聽深奧的,也就是求導的負方向,那麼上式能夠表示
對於上式,若是才用高斯核,那麼,第一項就等於fh,k
第二項就至關於一個meanshift向量的式子:
那麼(2)就能夠表示爲
下圖分析的構成,如圖因此,能夠很清晰的表達其構成。
要使得=0,當且僅當=0,能夠得出新的圓心座標:
(3)
上面介紹了meanshift的流程,可是比較散,下面具體給出它的算法流程。
真正大牛的人就能創造算法,例如像meanshift,em這個樣的算法,這樣的創新才能推進整個學科的發展。還有的人就是把算法運用的實際的運用中,推進整個工業進步,也就是技術的進步。下面介紹meashift算法怎樣運用到圖像上的聚類核跟蹤。
通常一個圖像就是個矩陣,像素點均勻的分佈在圖像上,就沒有點的稠密性。因此怎樣來定義點的機率密度,這纔是最關鍵的。
若是咱們就算點x的機率密度,採用的方法以下:以x爲圓心,以h爲半徑。落在球內的點位xi 定義二個模式規則。
(1)x像素點的顏色與xi像素點顏色越相近,咱們定義機率密度越高。
(2)離x的位置越近的像素點xi,定義機率密度越高。
因此定義總的機率密度,是二個規則機率密度乘積的結果,能夠(4)表示
(4)
其中:表明空間位置的信息,離遠點越近,其值就越大,表示顏色信息,顏色越類似,其值越大。如圖左上角圖片,按照(4)計算的機率密度如圖右上。利用meanshift對其聚類,可獲得左下角的圖。
|
http://www.cnblogs.com/liqizhou/archive/2012/05/12/2497220.html