非刚性目标的跟踪Hough Tracker源码在Windows下编译成功

非刚性目标的跟踪问题是跟踪任务中一个主要难题,之前在Institute of Computer Graphics and Vision (ICG)网站上下载了一个Hough Tracker的源码,一直没有时间跑一下。该源码是对2011年ICCV会议上的文章Hough-based Tracking of Non-rigid Objects的C++实现。文章的亮点在于提出了一个基于广义霍夫变换的方法,将霍夫森林的思想扩展到实时域,并结合基于投票的检测与基于GrabCut粗分割的反向投影,能明显降低原来的包围盒中的噪声背景部分对实时学习的影响,因而能有效防止跟踪器的漂移。作者的跟踪器能成功跟踪非刚性变化,部分遮挡,尺度改变与旋转情形,比当时最先进的方法(如基于包围盒的和基于部分的)要好。绿色部分是对文章的摘要翻译。

这两天尝试了一下如何编译运行它。解压后在根目录下的README里有提到如何编译,这里讲一下我的环境搭建:

CMake 3.4.3其他的版本也行

OpenCV 2.4.13其他的版本也可以

Boost 1.66.0我安装的是VS2015,需要用这个版本。其他的版本也可以

libconfig 1.4.10项目中用到这个库是为了解决配置文件的参数的读取。下载地址是http://www.hyperrealm.com/oss_libconfig.shtml。其他的版本也可以

我先在根目录下建一个build目录,进到里面:cmake ..(回车)

这就产生好了VS的工程文件。但是这个工程文件里用到的头文件和库文件都需要指定一下,上面提到的三个依赖库都要成功编译。编译后,得到Track.exe,Boost是静态链接的,已经链接到程序里头了,但OpenCV和libconfig都是动态链接的,故需要的dll还得拷贝到程序所在的目录才能运行。

程序编译是不通过的,有几个地方要改:

capture.cpp文件中一句“std::string fileName = dirItr->path().filename()”编译不过,改为“std::string fileName = dirItr->path().filename().string()”,用到boost::filesystem是要处理跟踪的图像序列的遍历。

main.cpp文件里“mkdir (seq_name.c_str(), 0755)”这一行要改成“_mkdir(seq_name.c_str())”,另外加上“#include <direct.h>”头文件的包含。

还有其他的错误,如引用opencv头文件时,改成“#include <opencv/cv.h>”而不是原来的“#include <cv.h>”

在运行的时候还要把sample目录拷贝到Track.exe所在的目录,命令行下执行:Track sample/sample.conf(回车)

运行后在output目录下生成跟踪的结果图片序列。发现时常有跟丢的情况,偶尔有跟踪正确的情况,这是由于每次跟踪的过程具有随机性。还是不够鲁棒,可能是因为飞车表演者的背景中的闪耀物体对目标的干扰较大。

非刚性目标的跟踪Hough Tracker源码在Windows下编译成功