2011-02-09 77 views
4

我使用opencv的camshift算法進行對象跟蹤。輸入來自網絡攝像機,並在連續幀之間跟蹤對象。我怎樣才能使跟蹤更強?如果我以快速移動對象,則跟蹤失敗。另外,當對象不在框架中時,會出現錯誤的檢測結果。我該如何改進?在open cv中改進camshift算法

+0

我不認爲單獨的camshift算法會解決這個問題。 – karlphillip 2011-02-09 15:58:33

回答

2

對象跟蹤是計算機視覺領域一個活躍的研究領域。有很多算法可以做到這一點,並且它們中的任何一個都不能百分之百地工作。

如果你需要實時跟蹤,那麼你需要一些簡單而快速的東西。我假設你有一種從背景中分割移動物體的方法。然後,您可以計算對象的表示形式(如顏色直方圖),並將其與您在下一幀中找到的對象進行比較。您還應該檢查該對象是否在幀之間移動得太遠。如果您想嘗試更高級的運動跟蹤,那麼您應該查看卡爾曼濾波器。

確定一個對象不在框架中也是一個大問題。首先,你試圖追蹤什麼樣的對象?人?汽車?小狗?您可以構建一個對象分類器,它會告訴您幀中的移動對象是否是您感興趣的對象,而不是噪聲或其他類型的對象。分類器可能非常簡單,比如對大小的限制,或者它可能非常複雜。在後一種情況下,您需要了解可以計算的特徵,分類算法(如支持向量機),並且您需要收集訓練圖像進行訓練。

總之,一個可靠的跟蹤器不是一件容易的事情。

1

假設您在前兩個框架​​中找到對象。從這些信息中,您可以推斷出第三幀中對象的位置。除了使用通用的查找對象算法外,還可以使用更慢,更復雜(因而更可靠)的算法,方法是限制它在附近檢查外推預測。它可能並不完全在你期望的位置(也許速度矢量正在改變),但你當然應該能夠減少檢查的區域。

這應該有助於減少幀的某些其他部分被錯誤識別爲對象的次數(因爲您正在查看幀的較小部分並且因爲您正在使用更好的特徵檢測器)。

根據您找到的內容更新外推,併爲下一幀迭代。

如果對象超出框,你退回到您的通用特徵檢測器,當你與前兩幀做,並再次嘗試得到一個「鎖定」時,對象返回到視圖。

另外,如果可以的話,儘可能多地將光線投射到物理場景中。如果場景很暗,網絡攝像機將使用較長的曝光時間,導致移動物體上出現更多運動模糊。運動模糊會使特徵檢測器變得非常困難(儘管它可以提供有關方向和速度的信息)。

0

我發現如果您在camShift中擴展搜索窗口的邊界,它會使算法對快速移動的對象有一定的適應性,儘管它可能引入一些不規則性。試着讓你的窗戶邊框增大10%,看看會發生什麼。