KCF跟蹤算法(1):KCF跟蹤demo

前言:

最近在看跟蹤算法,看了下比較久遠的meanshift、Lk光流算法等,感覺效果和速度都不是很滿意。直到我看了KCF跟蹤算法,這個算法速度快,效果好,具有很強的魯棒性,思路清晰。此外作者在主頁上給出了matlab和c的代碼,可以更好的理解算法。本來我打算敘述一下算法的原理,但是因爲網上已經有了很好的博客對KCF進行了詳細的介紹,對論文原理進行了推導,所以我打算從另一個方面去看算法——從代碼上看算法。爲了防止過程比較枯燥,我們先讓程序跑進來,相信你看到效果後會有很大的興趣想去了解算法的。

matlab代碼:

1.下載作者主頁下最新的matlab代碼
2.運行download_videos下載視頻,我運行的時候報錯了,提示是:
這裏寫圖片描述
這個問題應該是高版本的matlab把低版本的這個函數給刪掉了,函數本身對算法沒什麼影響。所以只需要刪除掉這個函數對應的代碼就好了,也就是
這裏寫圖片描述
3.下載視頻完成後,就可以運行run_tracker。同樣先把run_tracke下的matlabpool代碼給刪除。
這裏寫圖片描述
然後再把show_video.m下的這個函數給改了,
這裏寫圖片描述
,改成
這裏寫圖片描述
運行後會彈出一個GUI界面,選擇剛纔所下載的視頻,然後就開始進行跟蹤了,效果很好。
這裏寫圖片描述
這裏寫圖片描述
注:我的matlab是2015版本的,所修改的地方應該是matlab版本不同造成的,如果你運行的時候沒有報錯,也就不需要修改了。

C++代碼:

作者給出的配置是Linux下的,但是代碼沒有什麼本質區別,沒有用到什麼Linux下特有的函數。所以讓代碼在Windows跑通的方法很簡單,就是新建個解決方案,然後把裏面的Cpp和hpp文件拖進去:
這裏寫圖片描述
這裏寫圖片描述
根據作者的要求,需要OpenCV 3.0.0的支持。 另外C++版本的和matlab版本的讀取的都是圖片序列,並且需要對應的groundtruth_rect,比較麻煩。所以我修改了下runtracker.cpp,直接讀取視頻或攝像頭,然後手動畫框進行跟蹤。如下:
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
我加入了OpenCV320的dll,以便沒有OpenCV的同學也可以體驗,程序鏈接(源碼也在裏面)