主要内容

このページの翻訳は最新ではありませ。

ライブビデオ取得を使使用した,颜の検出と追迹

この例では,KLTアルゴリズムを使用してライブビデオストリーム内の颜を自动的に検出し追迹する方法を说明します。

概要

オブジェクトの検出と追跡は,アクティビティ認識,自動車安全性,監視など,多くのコンピュータービジョンアプリケーションにおいて重要です。この例では、Webカメラでキャプチャしたライブビデオストリーム中の1つの顔を追跡する,シンプルなシステムを作成します。MATLABは,ハードウェアサポートパッケージによってWebカメラのサポートを提供しています。この例を実行するには,このパッケージをダウンロードしてインストールする必要があります。サポートパッケージはサポートパッケージインストーラーから入手できます。

この例の顔追跡システムは,検出と追跡という2つのモードのうちいずれかの状態にあります。検出モードでは,Vision.cascadeObjectDetector.オブジェクトを使使ててててある颜検出できますますますます。愿景。PointTrackerオブジェクトを初期化してから,追迹モードに切り替えなければなりません。

追迹モードでは,ポイントトラッカーを使用して点を追迹しなければなりません。点を追迹する时に,​​それらのいくつかはオクルージョンのためになくなります。追迹している点の数がしきい値より低くなると,そのその颜はもはや追迹されていないことになりに戻ってはは検出しませませ直さ

设定

顔の検出,点の追跡,ビデオフレームの取得と表示を行うオブジェクトを作成します。

%创建面部探测器对象。FaceDetector = Vision.cascadeObjectDetector();创建点跟踪器对象。pointtracker = Vision.PointTracker(“MaxBidirectionalError”,2);%创建网络摄像头对象。凸轮=网络摄像头();%捕获一帧以获得其大小。videoFrame =快照(cam);frameSize =大小(videoFrame);%创建视频播放器对象。VideoPlayer = Vision.videoplayer(“位置”,[100 100 [框架化(2),框架(1)] + 30]);

検出と追跡

颜を検出し追迹するため,ループを使って网络カメラからビデオフレームをキャプチャし,处理します。ループは400フレーム分,あるいはビデオプレーヤーのウィンドウが闭じるまで実行されます。

runloop = true;numpts = 0;framecount = 0;runloop && framecount <400%得到下一个框架。videoFrame =快照(cam);视频ramegray = rgb2gray(视频rame);framecount = framount + 1;如果numPts < 10%检测模式。bbox = facedetector.step(视频ramegray);如果~ isempty (bbox)%找到检测到的区域内的角点。点= detectMinEigenFeatures (videoFrameGray,'roi',bbox(1,:));%重新初始化点跟踪器。Xypoints = points.location;numpts = size(xypoints,1);发布(PointTracker);初始化(PointTracker,Xypoints,VideoframeGray);保存点的副本。oldPoints = xyPoints;将[x, y, w, h]表示的矩形转换为an四个角的[x,y]坐标的% m × 2矩阵。这需要%以便能够将边界框转换为显示脸的方向。bboxpoints = bbox2points(bbox(1,:));%将框角转换为[x1 y1 x2 y2 x3 y3 x4 y4]insertshape所需的%格式。BboxPolygon = Rehape(BboxPoints',1,[]);%在检测到的面周围显示一个边界框。视频rame = insertshape(视频rame,'多边形'bboxPolygon,'行宽',3);%显示检测到的角落。Videoframe = InsertMarker(视频帧,XYPOINTS,“+”“颜色”'白色的');结尾别的%跟踪模式。[Xypoints,ISFound] =步骤(PointTracker,VideoframeGray);VisiblePoints = XYPOINTS(ISFOUND,:);ollinliers = oldPoints(isfound,:);numpts = size(visiblepoints,1);如果numPts > = 10估计旧点之间的几何变换%和新点。[XForm,InLieridx] = eStimateGeometricTransform2D(......oldInliers visiblePoints,“相似”'maxdistance',4);ollinliers = ollinliers(Inlieridx,:);VisiblePoints = VisiblePoints(Inlieridx,:);应用变换到包围框。bboxpoints = TransformPointSforward(XForm,BboxPoints);%将框角转换为[x1 y1 x2 y2 x3 y3 x4 y4]insertshape所需的%格式。BboxPolygon = Rehape(BboxPoints',1,[]);%在被跟踪的脸部上显示一个边界框。视频rame = insertshape(视频rame,'多边形'bboxPolygon,'行宽',3);%显示跟踪点。视频rame = InsertMarker(视频帧,visiblepoints,“+”“颜色”'白色的');%重置点。OldPoints = VisiblePoints;设定值(PointTracker,OldPoints);结尾结尾%使用Video Player对象显示带注释的视频帧。步骤(VideoPlayer,Videoframe);%检查视频播放器窗口是否已关闭。Runloop = Inopen(视频播放器);结尾%清理。清晰的凸轮;释放(Videoplayer);发布(PointTracker);释放(Faceedetector);

参考文献

Viola,Paul A.和Jones,Michael J.“使用促进级联的简单功能的快速对象检测”,IEEE CVPR,2001。

Bruce D. Lucas和Takeo Kanade。一种迭代图像配准技术,其应用于立体视觉。1981年人工智能国际联合会议。

卡洛·托马西和金德武夫。点特征的检测与跟踪。卡内基梅隆大学技术报告cmu - cs -91- 132,1991。

建立施和卡洛托马斯。跟踪的良好功能。IEEE计算机愿景和模式识别,1994年。

Zdenek Kalal,Krystian Mikolajczyk和Jiri Matas。前后误差:自动检测跟踪故障。2010年模式识别国际会议