Camshift演算法研究

2021-05-23 14:24:36 字數 1990 閱讀 1775

根據獲得的色彩直方圖將原始影象轉化成色彩概率分布影象,這個過程就被稱作"back projection" 。

在opencv 中的直方圖函式中,包含back projection 的函式,函式原型是:

void cvcalcbackproject(iplimage** img, cvarr** backproject, const cvhistogram* hist);

傳遞給這個函式的引數有三個:

1. iplimage** img: 存放原始影象,輸入。

2. cvarr** backproject: 存放back projection 結果,輸出。

3. cvhistogram* hist: 存放直方圖,輸入

下面就給出計算back projection 的opencv **。

1. 準備一張只包含被跟蹤目標的,將色彩空間轉化到hsi 空間,獲得其中的h 分量:

2. 計算h 分量的直方圖,即1d 直方圖:

5. 結果:result 即為我們需要的.

2.mean shift:

這裡來到了camshift 演算法,opencv 實現的第二部分,這一次重點討論mean shift 演算法。

在討論mean shift 演算法之前,首先討論在2d 概率分布影象中,如何計算某個區域的重心(mass center) 的問題,重心可以通過以下公式來計算:

1. 計算區域內0 階矩

for(int i=0;i 區域內1 階矩:

for(int i=0;i 則mass center 為:

xc=m10/m00; yc=m01/m00

接下來,討論mean shift 演算法的具體步驟,mean shift 演算法可以分為以下4 步:

1. 選擇窗的大小和初始位置.

2. 計算此時視窗內的mass center.

3. 調整視窗的中心到mass center.

4. 重複2 和3 ,直到視窗中心" 會聚" ,即每次視窗移動的距離小於一定的閾值。

在opencv 中,提供mean shift 演算法的函式,函式的原型是:

int cvmeanshift(iplimage* imgprob,cvrect windowin,

cvtermcriteria criteria,cvconnectedcomp* out);

需要的引數為:

1.iplimage* imgprob :2d 概率分布影象,傳入;

2.cvrect windowin :初始的視窗,傳入;

3.cvtermcriteria criteria :停止迭代的標準,傳入;

4.cvconnectedcomp* out: 查詢結果,傳出。

( 注:構造cvtermcriteria 變數需要三個引數,乙個是型別,另乙個是迭代的最大次數,最後乙個表示特定的閾值。例如可以這樣構造criteria :criteria=cvtermcriteria(cv_termcrit_iter|cv_termcrit_eps,10,0.1) 。)

返回的引數:

1.int :迭代的次數。

實現**:暫時缺

3.camshift:

camshift 演算法,opencv 實現(3):camshift 演算法

cvconnectedcomp* out, cvbox2d* box=0);

其中:imgprob :色彩概率分布影象。

windowin :search window 的初始值。

criteria :用來判斷搜尋是否停止的乙個標準。

out :儲存運算結果, 包括新的search window 的位置和面積。

box :包含被跟蹤物體的最小矩形。

說明:1. 在opencv 3.1 beta 的目錄中,有camshift 的例子。遺憾的是這個例子目標的跟蹤是半自動的,即需要人手工選定乙個目標。我正在努力嘗試全自動的目標跟蹤,希望 可以和大家能在這方面與大家交流。(已經實現自動的東西)

上面的文字有大部分是來自與網路。經過個人組織後發布。如有侵權請通知我。^_^

CamShift跟蹤演算法

ifdef ch pragma package opencv endif define cv no backward compatibility ifndef eic include cv.h include highgui.h include stdio.h include ctype.h end...

CamShift演算法,OpenCV實現

這裡來到了camshift演算法,opencv實現的第二部分,這一次重點討論mean shift演算法。在討論mean shift演算法之前,首先討論在2d概率分布影象中,如何計算某個區域的重心 mass center 的問題,重心可以通過以下公式來計算 1.計算區域內0階矩 for int i 0...

camShift跟蹤演算法介紹

camshift演算法的全稱是 continuously adaptive mean shift 即 連續自適應的meanshift 運算,並將上一幀的結果 即搜尋視窗的中心位置和視窗大小 作為下一幀meanshift 演算法的搜尋視窗的初始值,如此迭代下去。簡單點說,meanshift是針對單張尋...