我使用opencv的camshift算法進行對象跟蹤。輸入來自網絡攝像機,並在連續幀之間跟蹤對象。我怎樣才能使跟蹤更強?如果我以快速移動對象,則跟蹤失敗。另外,當對象不在框架中時,會出現錯誤的檢測結果。我該如何改進?在open cv中改進camshift算法
回答
對象跟蹤是計算機視覺領域一個活躍的研究領域。有很多算法可以做到這一點,並且它們中的任何一個都不能百分之百地工作。
如果你需要實時跟蹤,那麼你需要一些簡單而快速的東西。我假設你有一種從背景中分割移動物體的方法。然後,您可以計算對象的表示形式(如顏色直方圖),並將其與您在下一幀中找到的對象進行比較。您還應該檢查該對象是否在幀之間移動得太遠。如果您想嘗試更高級的運動跟蹤,那麼您應該查看卡爾曼濾波器。
確定一個對象不在框架中也是一個大問題。首先,你試圖追蹤什麼樣的對象?人?汽車?小狗?您可以構建一個對象分類器,它會告訴您幀中的移動對象是否是您感興趣的對象,而不是噪聲或其他類型的對象。分類器可能非常簡單,比如對大小的限制,或者它可能非常複雜。在後一種情況下,您需要了解可以計算的特徵,分類算法(如支持向量機),並且您需要收集訓練圖像進行訓練。
總之,一個可靠的跟蹤器不是一件容易的事情。
假設您在前兩個框架中找到對象。從這些信息中,您可以推斷出第三幀中對象的位置。除了使用通用的查找對象算法外,還可以使用更慢,更復雜(因而更可靠)的算法,方法是限制它在附近檢查外推預測。它可能並不完全在你期望的位置(也許速度矢量正在改變),但你當然應該能夠減少檢查的區域。
這應該有助於減少幀的某些其他部分被錯誤識別爲對象的次數(因爲您正在查看幀的較小部分並且因爲您正在使用更好的特徵檢測器)。
根據您找到的內容更新外推,併爲下一幀迭代。
如果對象超出框,你退回到您的通用特徵檢測器,當你與前兩幀做,並再次嘗試得到一個「鎖定」時,對象返回到視圖。
另外,如果可以的話,儘可能多地將光線投射到物理場景中。如果場景很暗,網絡攝像機將使用較長的曝光時間,導致移動物體上出現更多運動模糊。運動模糊會使特徵檢測器變得非常困難(儘管它可以提供有關方向和速度的信息)。
我發現如果您在camShift中擴展搜索窗口的邊界,它會使算法對快速移動的對象有一定的適應性,儘管它可能引入一些不規則性。試着讓你的窗戶邊框增大10%,看看會發生什麼。
- 1. open cv cv :: neon_cvtColorBGRA2GRAY問題
- 2. Android open CV
- 3. Open Cv相位相關
- 4. Open cv找到凸包
- 5. Open cv攝像機校準
- 6. 算法改進
- 7. 使用MySQL改進算法使用MySQL改進算法
- 8. 檢測臉部的眉毛[EMGU CV/Open CV/C#]
- 9. 如何使USB攝像頭在C#中的Open CV中工作?
- 10. 使用ffmpeg安裝Open-CV時出錯
- 11. 安裝open cv和python一起運行
- 12. Python Open CV - 獲取地區座標
- 13. Haar.js將open cv xml轉換爲javascript
- 14. 在OPEN CV中疊加圖像的顏色強度Python
- 15. 對算法的改進
- 16. 改進交集算法
- 17. 改進的Dijkstra算法
- 18. 如何改進算法
- 19. 需要打開CV算法書嗎?
- 20. Angular1/JavaScript的 - 改進算法中條件
- 21. 人臉檢測算法使用Emgu CV
- 22. 在Talend Open Studio中改進tOracleInput獲取大小
- 23. iOS中的Open-CV內存管理(Objective-c與ARC)
- 24. 在Python中改進模糊匹配算法
- 25. 改進足球模擬算法
- 26. JavaScript - 改進URL參數獲取算法
- 27. 演化算法沒有改進
- 28. 通過OpenCV的Camshift算法控制鼠標指針(或鼠標基本功能)
- 29. 改進F#中的矩陣計算
- 30. 熊貓:在列中找到子字符串改進算法
我不認爲單獨的camshift算法會解決這個問題。 – karlphillip 2011-02-09 15:58:33