均值漂移(meanShift、CamShift)

均值漂移主要用在視覺跟蹤,作法為從反投影直方圖的概率圖,得到目標影像出現在原始影像各個位置的概率,假設我們已知物體的大概位置,從這最初的位置,迭代移動來得到最大概率的位置,就是目標影像的精確位置,所以一開始的大概位置會影響到計算結果和花費時間。

OpenCV提供meanShift()函式處理均值漂移,計算預定窗口的加權平均值,將窗口中心移動到數據點的重心處,並重複這個過程來鎖定局部最大值,直到窗口重心收斂到一個穩定點,meanShift()函式定義了兩種終止條件,分別是迭代次數以及窗口中心的位移量,這個終止條件保存在TermCriteria中。

OpenCV另外有CamShift算法,這是一個改良的均值漂移算法,會調整搜尋窗口的尺寸和方向角度。


OpenCV均值漂移

int meanShift(InputArray probImage, Rect& window, TermCriteria criteria)

  • probImage:輸入反投影圖。
  • window:一開始的搜尋窗口。
  • criteria:停止條件。
  • window最後變更為搜尋結果的位置,函式返回迭代次數。

TermCriteria(int type, int maxCount, double epsilon) //TermCriteria類別的建構式

  • type:停止型態,COUNT、EPS或COUNT + EPS。
  • maxCount:迭代次數的最大值。
  • epsilon:停止條件,迭代在多少的準確度下停止。

OpenCV均值漂移

RotatedRect CamShift(InputArray probImage, Rect& window, TermCriteria criteria)

  • probImage:輸入反投影圖。
  • window:一開始的搜尋窗口。
  • criteria:停止條件。
  • 函式返回搜尋結果的旋轉矩形。