【原创】刘龙坡转载请注明出处
【CSDN】http://blog.csdn.net/llp1992
OpenCv提供了实现目标跟踪的两种重要算法: LK算法和HS算法,即稀疏光流和稠密光流。
寻找角点
角点实际上是一幅图像中容易被跟踪的特征点,通常该点在两个正交方向上具有明显的倒数,该点被认为是图像中唯一的。
直观上,转折点是有足够信息且可以从当前帧和下一帧中提取的点。
关于角的定义,Harris提出,其基础是图像灰度强度的二阶导数矩阵。 这一定义的角点在于图像的二阶导数的自相关矩阵中具有两个最大特征值,这实际上指示围绕这一点在周围存在至少两个不同方向的边缘。 实际上,有两个不同方向的边相交的拐角。 另外,采用二次导数是因为不对应图像的均匀梯度(梯度来自一次导数,如果一次导数一致,则二次导数为0 )。
函数cvGoodFeaturesToTrack()
voidcvgoodfeaturestotrack (constcvarr * image、CvArr* eig_image、CvArr* temp_image、CvPoint2D32f* corners、int* ) 在此函数中,输入图像image必须是8位或32位,即IPL_DEPTH_8U或IPL_DEPTH_32F单通道图像。
第二个和第三个参数是大小与输入图像相同的32位单通道图像。
参数temp_image和eig_image在计算过程中用作临时变量,计算完成后eig_image的内容有效。 特别是,每个函数都包含输入图像中对应的最小特征值。
corners是函数的输出,在调用cvGoodFeaturesToTrack函数之前为该数组分配内存空间,以检测32位(CvPoint2D32f )的角数组。
http://www.Sina.com/http://www.Sina.com /
检查结束后,去除更近的角落。 min_distance返回的拐角之间的距离为corner_count 表示可以返回的最大角点数目,函数调用结束后,其返回实际检测到的角点数目。
遮罩是可选参数,像素值为布尔型的图像,用于指定在输入图像的角点计算中参与的像素点。 如果mask值为NULL,则该值表示选择整个图像
block_size是指定了计算导数的自相关矩阵的区域,使用小窗口计算得到比在单点(即block_size为1 )计算的结果更好的结果
函数cvGoodFeaturesToTrack ()的输出结果是要找到的角点的位置数组。