**:
meanshift演算法思想其實很簡單:利用概率密度的梯度爬公升來尋找區域性最優。它要做的就是輸入乙個在影象的範圍,然後一直迭代(朝著重心迭代)直到滿足你的要求為止。但是他是怎麼用於做影象跟蹤的呢?這是我自從學習meanshift以來,一直的困惑。而且網上也沒有合理的解釋。經過這幾天的思考,和對反向投影的理解使得我對它的原理有了大致的認識。
在opencv中,進行meanshift其實很簡單,輸入一張影象(imgprob),再輸入乙個開始迭代的方框(windowin)和乙個迭代條件(criteria),輸出的是迭代完成的位置(comp )。
這是函式原型:
int cvmeanshift( const void* imgprob, cvrect windowin,
cvtermcriteria criteria, cvconnectedcomp* comp )
但是當它用於跟蹤時,這張輸入的影象就必須是反向投影圖了。
為什麼必須是反向投影圖呢?首先我們要理解什麼是反向投影圖。
簡單理解它其實實際上是一張概率密度圖。經過反向投影時的輸入是乙個目標影象的直方圖(也可以認為是目標影象),還乙個輸入是當前影象就是你要跟蹤的全圖,輸出大小與全圖一樣大,它上畫素點表徵著一種概率,就是全圖上這個點是目標影象一部分的概率。如果這個點越亮,就說明這個點屬於物體的概率越大。現在我們明白了這原來是一張概率圖了。當用meanshift跟蹤時,輸入的原來是這樣一幅影象,那也不難怪它可以進行跟蹤了。
半自動跟蹤思路
用過opencv的都知道,這其實是camshiftdemo的工作過程。
第一步:選中物體,記錄你輸入的方框和物體。
第三步:根據反向投影圖和輸入的方框進行meanshift迭代,由於它是向重心移動,即向反向投影圖中概率大的地方移動,所以始終會移動到目標上。
全自動跟蹤思路
第一步:運用運動檢測演算法將運動的物體與背景分割開來。
第二步:提取運動物體的輪廓,並從原圖中獲取運**像的資訊。
第三步:對這個資訊進行反向投影,獲取反向投影圖。
第四步:根據反向投影圖和物體的輪廓(也就是輸入的方框)進行meanshift迭代,由於它是向重心移 動,即向反向投影圖中概率大的地方移動,所以始終會移動到物體上。
總結:用meanshift進行跟蹤最重要的一點是輸入影象的把握,也就是要讓它的迭代能越來越迭代到目標上。這種影象也不一定就是反向投影圖,只要是一幅反映當前影象中每個畫素點含有目標概率圖就可以了,其實反向投影圖就是這樣的一幅圖而已。
目標跟蹤小結
一 引言 在需要監控的環境裡,如何能夠判斷出進入特定區域的目標,並且能夠跟蹤目標的軌跡。分為兩種情況 一是靜態背景下的目標跟蹤 二是動態背景下的目標跟蹤。二 靜態背景下的目標跟蹤方法 2 多目標 靜態環境下的多目標跟蹤,需要確定每個目標的特徵,位置,運動方向,速度等資訊。3 預處理 由於獲得的影象總...
目標跟蹤小結
一 引言 在需要監控的環境裡,如何能夠判斷出進入特定區域的目標,並且能夠跟蹤目標的軌跡。分為兩種情況 一是靜態背景下的目標跟蹤 二是動態背景下的目標跟蹤。二 靜態背景下的目標跟蹤方法 2 多目標 靜態環境下的多目標跟蹤,需要確定每個目標的特徵,位置,運動方向,速度等資訊。3 預處理 由於獲得的影象總...
Camshift目標跟蹤
camshift演算法是continuously adaptive mean shift algorithm的簡稱。它是乙個基於meansift的改進演算法。它首次由gary r.bradski等人提出和應用在人臉的跟蹤上,並取得了不錯的效果。由於它是利用顏色的概率資訊進行的跟蹤,使得它的執行效率比...