1.均值漂移(meanshift)。該演算法尋找概率函式離散樣本的最大密度,並且重新計算下一幀的最大密度,該演算法給出了目標的移動方向,重複計算,知道與原始中心匹配,後者迭代後中心保持不變,收斂。
3.均值漂移搜尋指定範圍內的目標進入視窗視窗就會跟蹤這個目標
import cv2
import numpy as np
# 設定初始化的視窗位置
r,h,c,w = 0,200,0,150 # 設定初試視窗位置和大小
track_window = (c,r,w,h)
cap = cv2.videocapture(0)
ret, frame= cap.read()
# 設定追蹤的區域
roi = frame[r:r+h, c:c+w]
# roi區域的hsv影象
hsv_roi = cv2.cvtcolor(frame, cv2.color_bgr2hsv)
# 取值hsv值在(0,60,32)到(180,255,255)之間的部分
mask = cv2.inrange(hsv_roi, np.array((0., 60.,32.)), np.array((180.,255.,255.)))
# 計算直方圖,引數為 (可多),通道數,蒙板區域,直方圖長度,範圍
roi_hist = cv2.calchist([hsv_roi],[0],mask,[180],[0,180])
# 歸一化
cv2.normalize(roi_hist,roi_hist,0,255,cv2.norm_minmax)
# 設定終止條件,迭代10次或者至少移動1次
term_crit = ( cv2.term_criteria_eps | cv2.term_criteria_count, 10, 1 )
while(1):
ret, frame = cap.read()
if ret == true:
# 計算每一幀的hsv影象
hsv = cv2.cvtcolor(frame, cv2.color_bgr2hsv)
# 計算反向投影
dst = cv2.calcbackproject([hsv],[0],roi_hist,[0,180],1)
# 呼叫meanshift演算法在dst中尋找目標視窗,找到後返回目標視窗
ret, track_window = cv2.meanshift(dst, track_window, term_crit)
# draw it on image
x,y,w,h = track_window
img2 = cv2.rectangle(frame, (x,y), (x+w,y+h), 255,2)
cv2.imshow('img2',img2)
if cv2.waitkey(1) & 0xff == ord('q'):
break
cap.release()
cv2.destroyallwindows()
Meanshift(均值漂移)
通過給出一組多維資料點,其維數是 x,y,r,g,b 均值漂移可以用乙個視窗掃瞄空間來找到資料密度最大的區域,可以理解為資料分布最集中的區域。在這裡需要注意,由於空間位置 也就是上面的x和y 的變化範圍與顏色的變化範圍 上面的r,g,b 有極大的不同,所以,meanshift對這兩個維數要採用不同的...
MeanShift 均值漂移演算法
前面說了k means聚類演算法,這裡我們介紹一種新的聚類演算法 meanshift,它常被用在影象識別中的目標跟蹤,資料聚類 分類等場景,前者的核函式使用了epannechnikov核函式,後者使用了gaussian 高斯核函式 一 演算法的原理理解 1 核函式 在mean shift演算法中引入...
均值漂移演算法實現
值漂移演算法是一種基於密度梯度上公升的非引數方法,它經常被應用在影象識別中的目標跟蹤,資料聚類,分類等場景。其核心思想是 首先隨便選擇乙個中心點,然後計算該中心點一定範圍之內所有點到中心點的距離向量的平均值,計算該平均值得到乙個偏移均值,然後將中心點移動到偏移均值位置 另一種理解 在d維空間中,任選...