MeanShift 均值漂移演算法

2021-08-16 00:19:15 字數 3158 閱讀 8073

前面說了k-means聚類演算法,這裡我們介紹一種新的聚類演算法:meanshift, 它常被用在影象識別中的目標跟蹤,資料聚類、分類等場景,前者的核函式使用了epannechnikov核函式,後者使用了gaussian(高斯核函式)

一 演算法的原理理解:

1 核函式

在mean shift演算法中引入核函式的目的是使得隨著樣本與被偏移點的距離的不同,其偏移量對均值偏移向量的貢獻也不同,下面看下核函式的定義

我的理解:這裡的k(x)相當於乙個球型的剖面,它確定了乙個區域

下面我們來介紹兩種核函式,高斯核函式:

這裡的分母中的h,被稱為頻寬,不同頻寬的核函式如下圖所示:計算與畫圖**如下:

import matplotlib.pyplot as plt

import math

def cal_gaussian(x, h=1):

molecule = x * x #分子

denominator = 2 * h * h #分母

left = 1 / (math.sqrt(2 * math.pi) * h) # math.sqrt開根號,math.pi派

return left * math.exp(-molecule / denominator) # math.exp 對應 底數e

可以看到h越大x的寬度越大

2 mean shift演算法的核心演算法原理與思想

mean shift演算法和k-means相似,都是乙個迭代的過程,即先算出當前點的偏移均值,將該點移動到該偏移均值,以此為新的起始點,繼續移動,直到滿足最終的條件。

下面給了張物理方面的圖示,來理解下:

這裡的s(h)是乙個半徑為h的高維球區域,滿足以下等式關係的y點的集合:

上面等式中的k值表示在這n個樣本點x(i)中,有k個點落入s(h)區域,在上式中,我們可以看到(x(i) - x)是樣本x(i)相對於點x的偏移向量,上面式子做的就是落入區域s(h)中的k個樣本點相對於點x偏移向量求和然後再平均,那麼如果樣本點x(i)從乙個概率密度函

數f(x)中取樣得到,由於非零的概率密度梯度指向概率密度增大的最大的方向,因此從平均上來說,s(h)的樣本點更多的是落在沿著概率密度梯度的方向,因此,對應的,

mean shift向量m(x)應該指向概率密度梯度的方向。

如上圖所示,大圓圈所圈住的是s區域,小圓圈表示落入s區域的樣本點x(i), 黑色的點就是mean shift的基準點x,箭頭表示樣本點相對於基準點x的偏移向量,很明顯我們可以看出,平均的偏移m(x)會指向樣本分佈最多的區域,也就是概率密度函式梯度的方向。

注:這裡,在上面式子中看到,只要是落入s區域的取樣點,無論其離中心點x的遠近,對最終m(x)的計算的貢獻是一樣的。然而在這個迭代的過程中,每個x(i)對於求解均值時的貢獻是不同的,所以這裡引入了其他型別的核函式。下面將下高斯核函式的方式。

3 用高斯核函式改進mean shift演算法

把高斯核函式和樣本權重加入m(x)的式子中,得到mean shift向量的新的形式:

把mh代入mh則可以得到下列公式,正好印證了梯度上公升的過程:

下面我們來看下高斯核函式是什麼樣子的:

式子中的h如上面這個矩陣。

二 以下是個應用的例子,demo

Meanshift(均值漂移)

通過給出一組多維資料點,其維數是 x,y,r,g,b 均值漂移可以用乙個視窗掃瞄空間來找到資料密度最大的區域,可以理解為資料分布最集中的區域。在這裡需要注意,由於空間位置 也就是上面的x和y 的變化範圍與顏色的變化範圍 上面的r,g,b 有極大的不同,所以,meanshift對這兩個維數要採用不同的...

均值漂移 Meanshift 演算法流程

均值漂移演算法是一種常見的聚類演算法,經常被應用在影象識別中的目標跟蹤 資料聚類等場景中。該演算法思想比較簡單,對於給定的一定數量樣本,首先隨便選擇乙個點,然後計算該點一定範圍之內所有點到中心點的距離向量的平均值作為偏移均值 也就是改點範圍內的質心 然後將中心點移動到偏移均值位置,通過這種不斷重複的...

目標跟蹤 Meanshift演算法 均值漂移演算法

傳統的meanshift演算法在跟蹤中有幾個優勢 1 演算法計算量不大,在目標區域已知的情況下完全可以做到實時跟蹤 2 採用核函式直方圖模型,對邊緣遮擋 目標旋轉 變形和背景運動不敏感。1 缺乏必要的模板更新 2 跟蹤過程中由於視窗寬度大小保持不變,當目標尺度有所變化時,跟蹤就會失敗 3 當目標速度...