今天看TLD的源代码,看其中mex中的lk.cpp文件,里面是TLD中的trackering部分
其中定义了这样的函数。
//归一化相关函数
void normCrossCorrelation(IplImage *imgI, IplImage *imgJ, CvPoint2D32f *points0, CvPoint2D32f *points1, int nPts, char *status, float *match,int winsize, int method) {
IplImage *rec0 = cvCreateImage( cvSize(winsize, winsize), 8, 1 );
IplImage *rec1 = cvCreateImage( cvSize(winsize, winsize), 8, 1 );
IplImage *res = cvCreateImage( cvSize( 1, 1 ), IPL_DEPTH_32F, 1 );
for (int i = 0; i < nPts; i++) {
if (status[i] == 1) {
cvGetRectSubPix( imgI, rec0, points0[i] );
cvGetRectSubPix( imgJ, rec1, points1[i] );
cvMatchTemplate( rec0,rec1, res, method );
match[i] = ((float *)(res->imageData))[0];
} else {
match[i] = 0.0;
}
}
cvReleaseImage( &rec0 );
cvReleaseImage( &rec1 );
cvReleaseImage( &res );
}
很明显中间两个函数我就不知道是干什么的?去官网上查了下。 还是一头雾水,只知道大概是先算一个偏移量,然后再用偏移量去进行匹配,匹配的方法可以根据method的不同而用不同的公式,估计都是数学上计算相关性常用的公式。
两个函数具体的文档如下,总之这个函数就是实现了归一化互相关系数的计算,具体用的公式,后面再做分析。
getRectSubPix
Retrieves a pixel rectangle from an image with sub-pixel accuracy.
-
C++:
void
getRectSubPix
(InputArray
image, Size
patchSize, Point2f
center, OutputArray
dst, int
patchType=-1
)
-
Python:
cv2.
getRectSubPix
(image, patchSize, center
[, patch
[, patchType
]
]
) → patch