主要内容

愿景。PointTracker

利用Kanade-Lucas-Tomasi (KLT)算法跟踪视频中的点

描述

点跟踪对象使用Kanade-Lucas-Tomasi (KLT)特征跟踪算法跟踪一组点。您可以使用点跟踪器进行视频稳定、摄像机运动估计和对象跟踪。它特别适用于跟踪不改变形状的对象和那些显示视觉纹理的对象。点跟踪器通常用于短期跟踪,作为大型跟踪框架的一部分。

随着时间的推移,点跟踪算法的进展,点可能会由于光照变化、平面旋转或关节运动而丢失。要在很长一段时间内跟踪一个对象,您可能需要定期重新获取点。

跟踪一组点:

  1. 创建愿景。PointTracker对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

例子

pointTracker =视觉。PointTracker返回一个点跟踪器对象,用于跟踪视频中的一组点。

pointTracker=愿景。PointTracker (名称,值使用一个或多个名称-值对设置属性。将每个属性名用引号括起来。例如,pointTracker ('NumPyramidLevels',3)

初始化跟踪过程:

要初始化跟踪过程,必须使用初始化指定点的初始位置和初始视频帧。

初始化(pointTracker点,我)初始化跟踪点并设置初始视频帧。初始位置,一定是一个[x y]坐标的-by-2数组。最初的视频帧,,必须是二维灰度图像或RGB图像,并且必须与传递给一步方法。

detectFASTFeaturesdetectSURFFeaturesdetectHarrisFeatures,detectMinEigenFeatures函数是获取用于跟踪的初始点的许多方法中的少数几种。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

金字塔层数,指定为整数。KLT算法的点跟踪器实现使用了图像金字塔。跟踪器生成一个图像金字塔,其中每一层的分辨率都比前一层降低了两倍。选择大于1的金字塔级别,使算法能够在多个分辨率级别上跟踪点,从最低级别开始。增加金字塔层次的数量可以让算法处理帧间点的更大位移。然而,计算成本也增加了。推荐值介于1而且4

每一层金字塔都是通过在宽度和高度上对前一层进行两倍的向下采样而形成的。点跟踪器在最低分辨率水平开始跟踪每个点,并继续跟踪直到收敛。对象将该级别的结果作为点位置的初始猜测传播到下一级别。通过这种方式,跟踪随着每一层的细化,直到原始图像。使用金字塔级别允许点跟踪器处理较大的像素运动,这些运动可以包含大于邻域大小的距离。

正向向后错误阈值,指定为标量。如果您将值设置为小于,跟踪器跟踪从上一帧到当前帧的每个点。然后,它跟踪相同的点回到前一帧。对象计算双向误差。这个值是经过反向跟踪后,从点的原始位置到最终位置的距离,单位为像素。当误差大于为此属性设置的值时,相应的点被认为无效。推荐值介于0而且3.像素。

使用双向误差是消除不能可靠跟踪点的有效方法。然而,双向误差需要额外的计算。当你设置MaxBidirectionalError财产,对象不计算双向误差。

被跟踪的每个点周围的邻域大小,指定为两元向量,[高度宽度].的高度而且宽度必须是奇数。这个邻域定义了空间梯度矩阵计算的面积。的最小值BlockSize是(5个5].增大邻域的大小,会增加计算时间。

每个点的最大搜索迭代次数,指定为整数。KLT算法对每个点的新位置进行迭代搜索,直到收敛。通常,算法在10次迭代中收敛。此属性设置搜索迭代次数的限制。推荐值介于10而且50

使用

描述

例子

point_validity] = pointTracker(跟踪输入帧中的点,

point_validity分数] = pointTracker(另外返回每个点的置信度分数。

选点(pointTracker设置跟踪点。函数设置2[数组]xy]与要跟踪的点的坐标。如果需要重新检测点,因为在跟踪过程中丢失了太多点,则可以使用此函数。

选点(pointTrackerpoint_validity另外,您可以将点标记为有效或无效。输入逻辑向量point_validity的长度,包含与待跟踪点的有效性相对应的true或false值。长度对应于点数。false值表示不应该跟踪的无效点。例如,可以将此函数与estimateGeometricTransform函数确定前一帧和当前帧中点位置之间的转换。可以将异常值标记为无效。

输入参数

全部展开

视频帧,指定为灰度或真彩色(RGB)。

输出参数

全部展开

跟踪的点,返回为-by-2数组的[xy]对应于输入帧中点的新位置的坐标,

每个点的轨道可靠性,返回为-by-1逻辑数组。有几个原因可以使一个点无效。如果这个点落在图像之外,它就会失效。此外,如果在其邻域内计算的空间梯度矩阵是奇异的,它也会失效。如果双向误差大于MaxBidirectionalError阈值,这种情况也可以使点无效。

之间的信心得分0而且1,作为1数组。这些值对应于每个点的前一个位置周围的邻域与新位置之间的相似程度。这些值是作为以前和新的邻域之间差异平方和的函数计算的。最大的跟踪置信度对应于完美匹配得分1

对象的功能

要使用对象函数,请指定System对象™作为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

初始化 初始化视频帧和点的跟踪
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

创建用于读取和显示视频以及绘制对象的包围框的System对象。

视频阅读器=视频阅读器(“visionface.avi”);videoPlayer =视觉。放像机(“位置”[100100680520]);

读取第一个视频帧,其中包含对象,定义区域。

objectFrame = readFrame(视频阅读器);objectRegion = [264,122,93,93];

作为替代方法,您可以使用以下命令使用鼠标选择对象区域。对象必须占据区域的大部分:

图;imshow (objectFrame);

objectRegion =圆(getPosition (imrect))

用红色边框显示初始帧。

objectImage = insertShape(对象帧,“矩形”objectRegion,“颜色”“红色”);图;imshow (objectImage);标题(“红框显示对象区域”);

在目标区域中检测兴趣点。

点= detectMinEigenFeatures(im2gray(objectFrame),“投资回报”, objectRegion);

显示检测点。

pointImage = insertMarker(对象帧,点。的位置,“+”“颜色”“白色”);图;imshow (pointImage);标题(“检测到的兴趣点”);

创建一个跟踪器对象。

追踪者=视觉。PointTracker (“MaxBidirectionalError”1);

初始化跟踪器。

初始化(跟踪、points.Location objectFrame);

在每个视频帧中读取、跟踪、显示点和结果。

hasFrame(视频阅读器)frame = readFrame(视频阅读器);[点数,有效性]=跟踪器(帧);out = insertMarker(帧,点(有效性,:)),“+”);放像机(出);结束

释放视频播放器。

释放(放像机);

参考文献

卢卡斯,布鲁斯·d和金德武夫。一种迭代图像配准技术及其在立体视觉中的应用第七届国际人工智能联合会议论文集, 1981年4月,第674-679页。

Tomasi, Carlo和Takeo Kanade。点特征的检测与跟踪1991年4月,卡内基梅隆大学计算机科学系。

[3] Shi, Jianbo和Carlo Tomasi。“值得追踪的好特性”IEEE计算机视觉与模式识别会议, 1994,第593-600页。

[4]卡拉尔,兹德内克,克里斯蒂安·米科拉奇克和吉里·马塔斯。《前后向错误:跟踪故障的自动检测》第20届模式识别国际会议论文集, 2010,第2756-2759页。

扩展功能

版本历史

在R2012b中引入