CamShift算法----OpenCV實現2 Mean Shift算法

原文http://blog.csdn.net/houdy/archive/2004/11/10/175844.aspx

這裏來到了CamShift算法,OpenCV實現的第二部分,這一次重點討論Mean Shift算法。
在討論Mean Shift算法之前,首先討論在2D概率分佈圖像中,如何計算某個區域的重心(Mass Center)的問題,重心可以通過以下公式來計算:
1.計算區域內0階矩
for(int i=0;i<height;i++)
  for(int j=0;j<width;j++)
     M00+=I(i,j)
2.區域內1階矩:
for(int i=0;i<height;i++)
  for(int j=0;j<width;j++)
  {
    M10+=i*I(i,j);
    M01+=j*I(i,j);
  }
3.則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:迭代的次數。

實現代碼:暫時缺

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章