2008-12-20 172 views
4

嗨,我一直在這個工作一段時間,但還沒有很好的解決方案。OpenCv Blob /輪廓標記

我正在逐幀讀取視頻幀,並使用背景減法' 確定有移動的區域,並使用cvFindContours()獲取移動對象的矩形邊界。

假設程序保持簡單,只能有2個人。

這些物體以可以重疊的方式移動,在一定的時間間隔內轉動並移開。

我如何正確地標記這個人x 2。

cvFindContour可以以隨機方式返回邊界。對於Frame1,Frame2,Frame3 .... FrameN

我可以初步比較矩形邊界質心以正確標記人體。一旦人類重疊並離開這種方法將失敗。

我試圖跟蹤原始obj的像素顏色(然而人類非常相似,某些區域具有類似於手,腿,頭髮的顏色),因此不夠好。

我用圖像統計考慮像:

CountNonZero(), SumPixels() 平均數() Mean_StdDev() MinMaxLoc() 範數()

唯一區分兩個對象。我相信這會是一個更好的方法。

回答

1

您可以嘗試記住每個幀的一個角(例如左上角)。然後,當您收到新的一組幀時,您將比較它們的角與先前保存的角的距離。這當然不是完美的解決方案。

  • 如果兩個斑點都在某個點上穿過它們的路徑,那麼它不確定結果是什麼。
  • 如果兩個斑點移動得太快,也會導致不希望的結果。
1

聽起來很困難,特別是如果視頻中有很多噪音。

也許確定兩個人會互動的不同情況。一些例子:

  1. 兩個人見面,然後要麼改弦易轍或繼續他們的標題
  2. 兩個人相遇,那麼只有一個人逆轉過程中或繼續他們的標題
  3. 兩個人見面,然後一個人仍然存在,另一個以相機視角「正常」的方向行進,即,遠離或朝向相機

計算機視覺教科書可以幫助確定其他情況。

考慮測量您爲視頻中每個幀列出的所有功能,然後繪製其結果。從中判斷是否有一種方法可以匹配某個邊界框中像素顏色的標準偏差,而這個邊界框在穿過路徑後是人類所在的邊界框。

15

這是一個難題,任何解決方案都不是完美的。計算機視覺被人們戲稱爲「AI完整」學科:如果你解決了計算機視覺問題,並且你已經解決了所有的人工智能問題。

背景減法可以是檢測對象的好方法。如果您需要改善背景扣除結果,則可以考慮使用MRF。據推測,你可以根據blob的大小判斷何時存在單個對象以及何時合併了兩個blob。如果軌跡在合併斑點期間不會快速變化,則可以執行Kalman tracking並使用一些heuristics來消除之後的斑點歧義。

即使兩個對象之間的顏色相似,也可以考慮嘗試使用mean shift tracker。有可能你需要做一些particle filtering來跟蹤關於誰是誰的多個假設。

還有一些更復雜的技術叫layered tracking。還有一些最近的作品Jojic and FreyWinnZhou and Tao,以及其他人。大多數這些技術都具有非常強大的假設和/或需要大量工作才能正確實施。

如果您對這個主題感興趣,我強烈建議您參加計算機視覺課程和/或閱讀教科書,例如Ponce and Forsyth's

+0

很少有鏈接被破壞,請你更新! – 2vision2 2013-07-04 09:07:54