您的位置:首页 > 编程语言 > C语言/C++

TLD源码--lk.cpp

2014-03-07 20:17 99 查看
lk.cpp在mex文件夹下面,在compile时和Opencv的库文件一起编译,在tldExample->tldProcessFrame->tldTracking中被调用,输入前一帧图像,后一帧图像和前一帧目标窗口提取的特征矩阵,这个矩阵是平均散落在目标窗口中的,并非是特殊的角点,因此也带来了一些问题,就是图像比较复杂时跟踪出错情况很明显,比如有许多人,而且发生遮挡频繁时,tld就根本跟踪不到目标了。lk文件处理两种情况,第一种case
0是对变量的初始化,IMG是存放输入图像的,PYR是放金字塔缓存的,CvPoint2D32f* points[3] = {0,0,0};是指向图像中点的指针,CvPoint2D32f定义如下:

typedef struct CvPoint2D32f

{

float x;

float y;

}

CvPoint2D32f;

case 2是用来处理跟踪的,lk(2,tld.img{I}.input,tld.img{J}.input,xFI,xFI),2用来选择处理哪类问题,tld.img{I}.input前一帧图像,是原始图像未处理过,tld.img{J}.input,后一帧图像,xFI是选取的特征点矩阵。

其中的主要函数:loadImageFromMatlab()顾名思义,就是把matlab里的图像,其实就是一个二维矩阵,读入到Iplimg类型的变量里去,其实就是存到imagedata结构里面。cvCalcOpticalFlowPyrLK,主要的跟踪处理函数,具体流程也不太熟,目的是在下一帧图像中跟踪前一帧的点,结果放入status数组中,status[i]==1表示跟踪上,==0表示没有跟踪上,normCrossCorrelation是对跟踪上的点,计算匹配度,就是计算ncc的值,euclideanDistance是计算相应的点对之间的欧式距离,计算fb的值。lk(2,tld.img{I}.input,tld.img{J}.input,xFI,xFI)这句的输出是一个列向量集,每列对应着一个点,前两个是x,y
坐标,后两个是匹配度和欧式距离。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: