|
跟踪伊始我们可以选择多种局部特征进行跟踪,被选择的点或者特征应该是独一无二的,或者至少接近独一无二,并且在与另一张图像的其他点可以进行参数化的比较。在选择点时,如果一个点在两个正交的方向上都有明显的导数,则我们认为此点更倾向是独一无二的,所以,许多可跟踪的特征点都称为角点。从直观上讲,角点并不是边缘点,而是一类含有足够信息且能从当前帧和下一帧中都能提取出来的点。
最普遍使用的角点是由Harris提出的,定义的基础是图像灰度强度的二阶导数矩阵,可以其成为一幅新的“二阶导数图像”。最原始的定义是将二阶导数的矩阵的行列式与二阶导数矩阵的迹(带权重系数)相减,再将差值同预先给定的阈值进行比较;后来Shi和Tomasi发现,若两个特征值中较小的一个大雨最小阈值,则会得到强角点。
OpenCV函数采用Shi和Tomasi提出的方法,先计算二阶导数,再计算特征值,它返回满足易于跟踪的定义的一些列点,函数如下:
void cvGoodFeaturesToTrack(
const CvArr* image,
CvArr* eigImage,
CvArr* tempImage,
CvPoint2D32f* corners,
int* corner_count,
double quality_level,
double min_distance,
const CvArr* mask = NULL,
int block_size =3,
int use_harris = 0,
double k = 0.4
)
|