主要内容

Vision.PointCracker.

利用kade - lucas - tomasi (KLT)算法跟踪视频点

描述

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

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

跟踪一组点:

  1. 创建Vision.PointCracker.对象,并设置其属性。

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

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

创建

描述

例子

pointtracker = Vision.PointCracker.返回一个点跟踪器对象,用于跟踪视频中的一组点。

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

初始化跟踪过程:

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

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

检测到空间探测拍摄detectHarrisFeatures, 和detectMinEigenFeatures函数是获取跟踪初始点的许多方法中的少数几种。

属性

全部展开

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

如果一个属性是可调,您可以随时更改它的值。

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象进行系统设计

金字塔层数,指定为整数。KLT算法的点跟踪器实现使用图像金字塔。跟踪器生成一个图像金字塔,其中每一层的分辨率比前一层降低了两倍。选择一个大于1的金字塔级别,使算法能够跟踪多个分辨率级别的点,从最低级别开始。增加金字塔水平的数量允许算法处理较大的位移之间的帧。然而,计算成本也会增加。推荐值为14

每一层金字塔都是通过对前一层的宽度和高度进行因子2的向下采样而形成的。点跟踪器从最低分辨率的每一个点开始跟踪,一直跟踪到收敛为止。对象将这一层的结果传播到下一层,作为点位置的初始猜测。这样,跟踪随着每一层而细化,直到原始图像。使用金字塔层次允许点跟踪器处理大像素运动,这可能包括大于邻域大小的距离。

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

使用双向误差是消除无法可靠跟踪的点的有效方法。但是,双向误差需要额外的计算。当你设置时maxbidirectionalerror.财产INF.,对象不会计算双向错误。

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

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

使用

描述

例子

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

point_validity得分) = pointTracker (此外,返回每个点的信心分数。

setPoints(PointTracker,设置跟踪点。函数将2[xy]与追踪点的坐标。如果需要重新检测点,则可以使用此功能,因为在跟踪期间丢失了太多时,太多丢失了。

setPoints(PointTracker,point_validity另外,允许您标记点为有效或无效。输入逻辑向量point_validity的长度,包含与要跟踪的点的有效性相对应的真值或假值。长度对应于点的个数。假值表示不应该跟踪的无效点。例如,可以使用这个函数estimateGeometricTransform函数来确定先前和当前帧中的点位置之间的变换。您可以将异常值标记为无效。

输入参数

全部展开

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

输出参数

全部展开

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

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

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

对象的功能

要使用对象功能,请将System Object™指定为第一个输入参数。例如,要发布命名的系统对象的系统资源obj,使用此语法:

发行版(obj)

全部展开

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

例子

全部折叠

创建系统对象以读取和显示视频,并绘制对象的边界框。

videoReader = videoReader ('Visionface.avi');放像机=愿景。放像机('位置',[100,100,680,520]);

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

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);标题(“检测兴趣点”);

创建一个跟踪器对象。

Tracker = Vision.PointCracker('maxbidirectionalerror'1);

初始化跟踪。

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

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

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

释放视频播放器。

释放(Videoplayer);

参考

[1] Lucas,Bruce D.和Takeo Kanade。“一种迭代图像配准技术,具有立体视觉的应用程序,”第七届国际人工智能联合会议论文集, 1981年4月,第674-679页。

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

[3]史,建博和卡洛汤姆西。“追踪的好功能,”IEEE计算机愿景和模式识别, 1994,第593-600页。

[4] Kalal,Zdenek,Krystian Mikolajczyk和Jiri Matas。“前后错误:自动检测跟踪故障,”第20届国际模式识别国际会议的诉讼程序,2010年,2010年第2756-2759页。

扩展功能

在R2012B中介绍