主要内容

愿景。PointTracker

利用KLT算法跟踪视频中的点

描述

点跟踪器对象使用Kanade-Lucas-Tomasi (KLT)特征跟踪算法跟踪一组点。您可以使用点跟踪器进行视频稳定、相机运动估计和目标跟踪。它尤其适用于跟踪那些形状不变的物体和那些呈现视觉纹理的物体。点跟踪器通常作为大型跟踪框架的一部分用于短期跟踪。

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

跟踪:跟踪一组点:

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

  2. 调用带有参数的对象,就像调用函数一样。

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

例子

pointTracker =愿景。PointTracker返回一个跟踪视频中一组点的点跟踪器对象。

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

初始化跟踪流程:

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

初始化(pointTracker点,我)初始化跟踪点并设置初始视频帧。最初的位置,必须是一个[xy]坐标的-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 array of [xy对应于输入帧中点的新位置的坐标,

每个点的轨迹可靠性,返回为1逻辑数组。由于多种原因,一个点可能无效。如果这个点落在图像之外,它就会失效。如果在其邻域内计算的空间梯度矩阵是奇异的,则该方法无效。如果双向误差大于MaxBidirectionalError阈值,这个条件也可以使点无效。

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

对象的功能

要使用对象函数,请将System对象™指定为第一个输入参数。例如,释放名为obj,使用以下语法:

发行版(obj)

全部展开

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

例子

全部折叠

创建用于读取和显示视频以及绘制对象边框的系统对象。

videoReader = videoReader (“visionface.avi”);放像机=愿景。放像机(“位置”[100100680520]);

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

objectFrame = readFrame (videoReader);objectRegion =(264122、93、93);

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

图;imshow (objectFrame);

objectRegion =圆(getPosition (imrect))

用红色边框显示初始帧。

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

检测对象区域中的兴趣点。

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

显示检测到的点。

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

创建一个跟踪器对象。

追踪=愿景。PointTracker (“MaxBidirectionalError”1);

初始化跟踪。

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

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

hasFrame(videereader) frame = readFrame(videereader);(点,有效性)=追踪(框架);out = insertMarker(frame,points(validity,:),“+”);放像机(出);结束

释放视频播放器。

释放(放像机);

参考文献

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

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

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

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

扩展功能

版本历史

介绍了R2012b

Baidu
map