主要内容

使用KLT人脸检测和跟踪算法

这个例子展示了如何使用特征点自动检测和跟踪一脸。在这个例子中跟踪的方法面对即使人倾斜他或她的头,或走向远离相机。

介绍

对象检测和跟踪是重要的活动在许多计算机视觉应用程序包括识别、汽车安全、监视。在本例中,您将开发一个简单的脸跟踪系统跟踪问题划分成三个部分:

  1. 发现一张脸

  2. 识别面部特征跟踪

  3. 跟踪的脸

发现一张脸

首先,你必须检测。使用vision.CascadeObjectDetector对象检测在视频帧的位置。级联对象探测器使用Viola-Jones检测算法和训练分类模型检测。默认情况下,探测器被配置为检测的脸,但它可以用来检测其他类型的对象。

%创建一个级联探测器对象。faceDetector = vision.CascadeObjectDetector ();%读一个视频帧和运行探测器。videoReader = videoReader (“tilted_face.avi”);videoFrame = readFrame (videoReader);bbox =步骤(faceDetector videoFrame);%画出周围的边界框返回检测到的脸。videoFrame = insertShape (videoFrame,“矩形”,bbox);图;imshow (videoFrame);标题(“发现脸”);

图包含一个坐标轴对象。坐标轴对象与标题发现脸包含一个类型的对象的形象。

%第一框转换成一个4点的列表%这是需要能够可视化对象的旋转。:bboxPoints = bbox2points (bbox (1));

跟踪的脸随着时间的推移,这个例子使用Kanade-Lucas-Tomasi (KLT)算法。虽然可以使用级联对象探测器在每一帧,在计算上是昂贵的。它也可能无法检测到的脸,当主体或歪了歪脑袋。这种限制来自训练分类模型用于检测的类型。示例只检测一次脸,然后KLT算法跟踪整个视频帧。

识别面部特征跟踪

KLT算法跟踪一组视频帧的特征点。一旦检测定位的脸,下一步确定特征点的示例中,可以可靠地跟踪。下面的例子使用了标准,提出的“好特征跟踪”史和预。

在面对地区检测特征点。

点= detectMinEigenFeatures (im2gray (videoFrame),“投资回报”,bbox);%显示检测到的点。人物,imshow (videoFrame)、标题(“检测功能”);情节(点);

图包含一个坐标轴对象。坐标轴对象标题检测特性包含2图像类型的对象,线。一个或多个行显示的值只使用标记

初始化一个跟踪器跟踪点

特征点的识别,您现在可以使用vision.PointTracker系统对象跟踪他们。每个点的前一帧,跟踪器试图找到当前帧中的对应点。然后estimateGeometricTransform2D函数是用来估计平移、旋转、和规模之间的点和新老点。这个变换应用于周围的边界框的脸。

创建一个点追踪,使双向误差约束更健壮的噪音和混乱。

pointTracker = vision.PointTracker (“MaxBidirectionalError”2);%初始化跟踪器的初始位置和初始点%的视频帧。点= points.Location;初始化(pointTracker点,videoFrame);

初始化一个视频播放器来显示结果

创建一个视频播放器对象显示视频帧。

放像机= vision.VideoPlayer (“位置”,(100 100(大小(videoFrame, 2),大小(videoFrame 1) + 30]);

跟踪的脸

跟踪点从帧到帧,和使用estimateGeometricTransform2D函数估计的运动的脸。

复制的点之间的几何变换用于计算点在前面和当前帧

oldPoints =点;hasFrame (videoReader)%得到下一帧videoFrame = readFrame (videoReader);%跟踪点。注意,可能会丢失一些点。(点,isFound) = (pointTracker videoFrame)步;visiblePoints =点(isFound:);oldInliers = oldPoints (isFound:);如果大小(visiblePoints 1) > = 2%至少需要2点%估计老点之间的几何变换%和新分和消除异常值[xform, inlierIdx] = estimateGeometricTransform2D (oldInliers visiblePoints,“相似”,“MaxDistance”4);oldInliers = oldInliers (inlierIdx:);visiblePoints = visiblePoints (inlierIdx:);%转换应用于边界框点bboxPoints = transformPointsForward (xform, bboxPoints);%插入一个边界框的对象被跟踪bboxPolygon =重塑(bboxPoints ', 1, []);videoFrame = insertShape (videoFrame,“多边形”bboxPolygon,“线宽”2);%显示跟踪点videoFrame = insertMarker (videoFrame visiblePoints,“+”,“颜色”,“白色”);%重置点oldPoints = visiblePoints;选点(pointTracker oldPoints);结束%显示注释视频帧使用视频播放器对象步骤(放像机、videoFrame);结束%清理释放(放像机);

数字视频播放器包含一个坐标轴对象和其他对象类型的uiflowcontainer, uimenu uitoolbar。坐标轴对象包含一个类型的对象的形象。

释放(pointTracker);

总结

在本例中,您创建了一个简单的跟踪系统,自动检测和跟踪一个脸。试着改变输入视频,看看你还能探测和跟踪的脸。确保相机的人面临的初始帧检测步骤。

引用

Viola, Paul a .和琼斯,迈克尔·J。“快速目标检测使用了简单的级联功能”,IEEE CVPR, 2001年。

布鲁斯·d·卢卡斯和金。一个迭代的图像配准技术应用立体视觉。人工智能国际联合大会,1981年。

卡洛预和金。检测和跟踪点的特性。卡内基梅隆大学技术报告cmu - cs - 91 - 132, 1991。

简帛史和卡洛预。良好的跟踪特性。IEEE计算机视觉与模式识别会议,1994。

兹德内克Kalal。Krystian Mikolajczyk和吉马特斯。Forward-Backward错误:自动检测跟踪失败。模式识别国际会议上,2010年