導航:首頁 > 源碼編譯 > 目標跟蹤演算法代碼

目標跟蹤演算法代碼

發布時間:2022-09-02 18:29:54

1. 自動跟蹤的跟蹤演算法

質心跟蹤演算法:這種跟蹤方式用於跟蹤有界目標,且目標與環境相比有明顯不同灰度等級,如空中飛機等。目標完全包含在鏡頭視場范圍內。

相關跟蹤演算法:相關可用來跟蹤多種類型的目標,當跟蹤目標無邊界且動態不是很強時這種方式非常有效。典型應用於:目標在近距離的范圍,且目標擴展到鏡頭視場范圍外,如航行在大海中的一艘船。

相位相關演算法:相位相關演算法是非常通用的演算法,既可以用來跟蹤無界目標也可以用來跟蹤有界目標。在復雜環境下(如地面的汽車)能給出一個好的效果。

多目標跟蹤演算法:多目標跟蹤用於有界目標如飛機、地面汽車等。它們完全在跟蹤窗口內。對復雜環境里的小目標跟蹤,本演算法能給出一個較好的性能。
邊緣跟蹤演算法:當跟蹤目標有一個或多個確定的邊緣而同時卻又具有不確定的邊緣,這時邊緣跟蹤是最有效的演算法。典型如火箭發射,它有確定好的前邊緣,但尾邊緣由於噴氣而不定。

場景鎖定演算法:該演算法專門用於復雜場景的跟蹤。適合於空對地和地對地場景。這個演算法跟蹤場景中的多個目標,然後依據每個點的運動,從而估計整個場景全局運動,場景中的目標和定位是自動選擇的。當存在跟蹤點移動到攝像機視場外時,新的跟蹤點能自動被標識。瞄準點初始化到場景中的某個點,跟蹤啟動,同時定位瞄準線。在這種模式下,能連續跟蹤和報告場景里的目標的位置。

組合跟蹤演算法:顧名思義這種跟蹤方式是兩種具有互補特性的跟蹤演算法的組合:相關類演算法 + 質心類演算法。它適合於目標尺寸、表面、特徵改變很大的場景。

2. 目標跟蹤(3)MultiTracker : 基於 OpenCV (C++/Python) 的多目標跟蹤

在這篇文章中,我們將介紹如何使用通過 MultiTracker 類實現的 OpenCV 的多對象跟蹤 API。我們將共享C++ 和 Python 代碼。


大多數計算機視覺和機器學習的初學者都學習對象檢測。如果您是初學者,您可能會想為什麼我們需要對象跟蹤。我們不能只檢測每一幀中的對象嗎?

讓我們來探究一下跟蹤是有用的幾個原因。

首先,當在視頻幀中檢測到多個對象(例如人)時,跟蹤有助於跨幀建立對象的身份。

其次,在某些情況下,對象檢測可能會失敗,但仍可能跟蹤對象,因為跟蹤考慮了對象在前一幀中的位置和外觀。

第三,一些跟蹤演算法非常快,因為它們做的是局部搜索,而不是全局搜索。因此,我們可以通過每n幀進行目標檢測,並在中間幀中跟蹤目標,從而為我們的系統獲得很高的幀率。

那麼,為什麼不在第一次檢測後無限期地跟蹤對象呢?跟蹤演算法有時可能會丟失它正在跟蹤的對象。例如,當對象的運動太大時,跟蹤演算法可能跟不上。許多現實世界的應用程序同時使用檢測和跟蹤。

在本教程中,我們只關注跟蹤部分。我們想要跟蹤的對象將通過拖動它們周圍的包圍框來指定。

OpenCV 中的 MultiTracker 類提供了多目標跟蹤的實現。它是一個簡單的實現,因為它獨立處理跟蹤對象,而不對跟蹤對象進行任何優化。

讓我們逐步查看代碼,了解如何使用 OpenCV 的多目標跟蹤 API。

2.1 第 1 步:創建單一對象跟蹤器

多目標跟蹤器只是單目標跟蹤器的集合。我們首先定義一個函數,該函數接受一個跟蹤器類型作為輸入,並創建一個跟蹤器對象。OpenCV有8種不同的跟蹤器類型:BOOSTING, MIL, KCF,TLD, MEDIANFLOW, GOTURN, MOSSE, CSRT。

如果您想使用 GOTURN 跟蹤器,請務必閱讀這篇文章並下載 caffe 模型。

在下面的代碼中,給定跟蹤器類的名稱,我們返回跟蹤器對象。這將在稍後用於多目標跟蹤器。

Python


C++


2.2 第 2 步:讀取視頻的第一幀

多目標跟蹤器需要兩個輸入

給定這些信息,跟蹤器在所有後續幀中跟蹤這些指定對象的位置。 在下面的代碼中,我們首先使用 VideoCapture 類載入視頻並讀取第一幀。這將在稍後用於初始化 MultiTracker。

Python


C++


2.3 第 3 步:在第一幀中定位對象

接下來,我們需要在第一幀中定位我們想要跟蹤的對象。該位置只是一個邊界框。 OpenCV 提供了一個名為 selectROI 的函數,該函數會彈出一個 GUI 來選擇邊界框(也稱為感興趣區域 (ROI))。 在 C++ 版本中,selectROI 允許您獲取多個邊界框,但在 Python 版本中,它只返回一個邊界框。所以,在 Python 版本中,我們需要一個循環來獲取多個邊界框。 對於每個對象,我們還選擇一種隨機顏色來顯示邊界框。 代碼如下所示。

Python


C++

getRandomColors 函數相當簡單

2.4 第 3 步:初始化 MultiTracker

到目前為止,我們已經讀取了第一幀並獲得了對象周圍的邊界框。這就是我們初始化多目標跟蹤器所需的所有信息。

我們首先創建一個 MultiTracker 對象,並向其中添加與邊界框一樣多的單個對象跟蹤器。在此示例中,我們使用 CSRT 單對象跟蹤器,但您可以通過將下面的 trackerType 變數更改為本文開頭提到的 8 個跟蹤器之一來嘗試其他跟蹤器類型。 CSRT 跟蹤器不是最快的,但在我們嘗試的許多情況下它產生了最好的結果。

您還可以使用包裹在同一個 MultiTracker 中的不同跟蹤器,但當然,這沒什麼意義。

MultiTracker 類只是這些單個對象跟蹤器的包裝器。正如我們從上一篇文章中知道的那樣,單個對象跟蹤器是使用第一幀初始化的,並且邊界框指示我們想要跟蹤的對象的位置。 MultiTracker 將此信息傳遞給它在內部包裝的單個對象跟蹤器。

Python


C++


2.5 第 4 步:更新 MultiTracker 並顯示結果

最後,我們的 MultiTracker 已准備就緒,我們可以在新幀中跟蹤多個對象。我們使用 MultiTracker 類的 update 方法來定位新框架中的對象。每個跟蹤對象的每個邊界框都使用不同的顏色繪制。

Python


C++


C++


Python


3. opencv中目標跟蹤的演算法有哪些

是對MeanShift演算法的改進演算法,可以在跟蹤的過程中隨著目標大小的變化實時調整搜索窗口大小,對於視頻序列中的每一幀還是採用MeanShift來尋找最優迭代結果,至於如何實現自動調整窗口大小的,

4. 誰有基於協方差矩陣的目標跟蹤演算法的代碼

跟蹤是一個很混亂的方向。

比如TLD、CT、Struct這些效果不錯的Tracker其實都不是單純的Tracker了。09年的時候我記得比較流行的是Particle Filtering, 或者一些MeanShift/CamShift的變形,比如特徵變了,比如對問題的假設變了。

5. 關於TLD目標跟蹤演算法的問題

跟蹤是一個很混亂的方向。

比如TLD、CT、Struct這些效果不錯的Tracker其實都不是單純的Tracker了。09年的時候我記得比較流行的是Particle Filtering, 或者一些MeanShift/CamShift的變形,比如特徵變了,比如對問題的假設變了。

後來突然出現一些tracking by detection的方法,之前的很多朋友就覺得這是耍流氓。比如TLD,嚴格的跟蹤演算法也許只是裡面的Forward/Backward Opitcal Flow的部分,但是效果很Impressive,所以不管怎樣,一下就火了。

之後所謂的跟蹤就不再是一個傳統的跟蹤問題,而是一個綜合的工程問題。online learning,random projection ,sparse learning的東西都加進來,大家其實到底是在做跟蹤還是在做檢測或者online learning,其實已經不重要,因為衡量的標準是你在某些public dataset上的精度。

但這些對實際的項目有沒有幫助呢?

這是個很有意思的地方,在很多時候,我們之所以需要跟蹤演算法,是因為我們的檢測演算法很慢,跟蹤很快。基本上當前排名前幾的跟蹤演算法都很難用在這樣的情況下,因為你實際的速度已經太慢了,比如TLD,CT,還有Struct,如果目標超過十個,基本上就炸了。況且還有些跟蹤演算法自己drift掉了也不知道,比如第一版本的CT是無法處理drift的問題的,TLD是可以的,究其原因還是因為檢測演算法比較魯棒啊……

實際中我覺得速度極快,實現也簡單的純跟蹤演算法居然是NCC和Overlap。

NCC很簡單,這個是對點進行的,對於區域也有很多變種,網上有一些相關的資源。

Overlap是我取的名字,一般用在裡面,假如你的攝像頭是靜止的,背景建模之後出來的前景可以是一個一個的blob,對相鄰兩幀的blob檢測是否Overlap就可以得到track。在一些真實場景下,這個演算法是非常有效的。關於背景template的問題在真實的裡面也是很好解決的。

坐在電腦前面調試代碼tuning 各種閾值讓跟蹤演算法在某一個幀下面不要drift的事情我是再也不想幹了。
順祝你2015幸福快樂。

6. 計算機視覺中,目前有哪些經典的目標跟蹤演算法

跟蹤是一個很混亂的方向。

比如TLD、CT、Struct這些效果不錯的Tracker其實都不是單純的Tracker了。09年的時候我記得比較流行的是Particle Filtering, 或者一些MeanShift/CamShift的變形,比如特徵變了,比如對問題的假設變了。

後來突然出現一些tracking by detection的方法,之前的很多朋友就覺得這是耍流氓。比如TLD,嚴格的跟蹤演算法也許只是裡面的Forward/Backward Opitcal Flow的部分,但是效果很Impressive,所以不管怎樣,一下就火了。

之後所謂的跟蹤就不再是一個傳統的跟蹤問題,而是一個綜合的工程問題。online learning,random projection ,sparse learning的東西都加進來,大家其實到底是在做跟蹤還是在做檢測或者online learning,其實已經不重要,因為衡量的標準是你在某些public dataset上的精度。

但這些對實際的項目有沒有幫助呢?

這是個很有意思的地方,在很多時候,我們之所以需要跟蹤演算法,是因為我們的檢測演算法很慢,跟蹤很快。基本上當前排名前幾的跟蹤演算法都很難用在這樣的情況下,因為你實際的速度已經太慢了,比如TLD,CT,還有Struct,如果目標超過十個,基本上就炸了。況且還有些跟蹤演算法自己drift掉了也不知道,比如第一版本的CT是無法處理drift的問題的,TLD是可以的,究其原因還是因為檢測演算法比較魯棒啊……

實際中我覺得速度極快,實現也簡單的純跟蹤演算法居然是NCC和Overlap。

NCC很簡單,這個是對點進行的,對於區域也有很多變種,網上有一些相關的資源。

Overlap是我取的名字,一般用在視頻裡面,假如你的攝像頭是靜止的,背景建模之後出來的前景可以是一個一個的blob,對相鄰兩幀的blob檢測是否Overlap就可以得到track。在一些真實場景下,這個演算法是非常有效的。關於背景template的問題在真實的視頻裡面也是很好解決的。

坐在電腦前面調試代碼tuning 各種閾值讓跟蹤演算法在某一個視頻幀下面不要drift的事情我是再也不想幹了。
順祝你2015幸福快樂。

7. 德雲系:擴展模塊的目標跟蹤演算法有哪些

你好,分為了以下四種:
1. KCF:TrackerKCF 使用目標周圍區域的循環矩陣採集正負樣本,利用脊回歸訓練目標檢測器,並成功的利用循環矩陣在傅里葉空間可對角化的性質將矩陣的運算轉化為向量的Hadamad積,即元素的點乘,大大降低了運算量,提高了運算速度,使演算法滿足實時性要求.
2.MIL:TrackerMIL 以在線方式訓練分類器將對象與背景分離;多實例學習避免魯棒跟蹤的漂移問題
3. OLB:TrackerBoosting 基於AdaBoost演算法的在線實時對象跟蹤.分類器在更新步驟中使用周圍背景作為反例以避免漂移問題.
4.MedianFlow:TrackerMedianFlow 跟蹤器適用於非常平滑和可預測的運動,物體在整個序列中可見.
5.TLD:TrackerTLD 將長期跟蹤任務分解為跟蹤,學習和檢測.跟蹤器在幀之間跟蹤對象.探測器本地化所觀察到的所有外觀,並在必要時糾正跟蹤器.學習估計檢測器的錯誤並進行更新以避免再出現這些錯誤.追蹤器能夠處理快速運動,部分遮擋,物體缺失等情況.

閱讀全文

與目標跟蹤演算法代碼相關的資料

熱點內容
文檔加密授權工具 瀏覽:436
命令與征服將軍閃退 瀏覽:132
vs2019預編譯怎麼設置 瀏覽:780
沈陽中軟python培訓班 瀏覽:493
逆戰文件夾怎麼放 瀏覽:120
怎麼統一刪除文件夾raw文件 瀏覽:121
卡爾曼濾波演算法書籍 瀏覽:769
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:844
安卓怎麼下載60秒生存 瀏覽:803
外向式文件夾 瀏覽:240
dospdf 瀏覽:431
怎麼修改騰訊雲伺服器ip 瀏覽:392
pdftoeps 瀏覽:496
為什麼鴻蒙那麼像安卓 瀏覽:736
安卓手機怎麼拍自媒體視頻 瀏覽:186
單片機各個中斷的初始化 瀏覽:724
python怎麼集合元素 瀏覽:481
python逐條解讀 瀏覽:833
基於單片機的濕度控制 瀏覽:499
ios如何使用安卓的帳號 瀏覽:883