目标跟踪
目标跟踪是避让行人、安防与监控以及增强现实等许多应用场景的重要组成部分。在此示例中,将使用卡尔曼滤波跟踪一个小球。
目标检测与计数
可以利用视频处理来检测并统计视频序列中移动的目标数目。在此案例研究中,澳大利亚的科学家使用录像片断来估计野生水鸟的种群数量。
MATLAB 提供了用于查看、分析、读取和写入视频的工具和算法。视频处理在以下这些应用领域很有用:
- 运用深度学习进行目标识别
- 光流等运动估计
- 人脸检测和跟踪
简单的 4 步视频处理
运用 MATLAB 进行视频处理涉及以下步骤:
- 读取视频
- 显示视频
- 处理视频
- 写入视频
步骤 1.读取视频
您可以从文件或直接从摄像机读取视频。
利用一条 MATLAB 命令便可从文件中读取视频:
>> vid = VideoReader('filename.avi')
MATLAB 支持网络摄像头视频处理,Image Acquisition Toolbox 则可用于从许多工业和科学摄像机中实时采集视频。
MATLAB 让您能够使用各种编解码器读取视频文件,包括 Microsoft® Windows®、Mac 和 Linux® 操作系统特定的编解码器。
Video Viewer应用程序 可播放 MATLAB 电影、视频或图像序列。使用该应用程序可以开始、停止并以不同的速度播放视频,还可以跳转到视频的某一段。
步骤 3.处理视频
视频是由独立的视频帧或图像组成的序列。这意味着,设计用于图像边缘检测的算法能够快速转换为对视频执行边缘检测。
读取单个图像 |
从视频中读取图像帧 |
---|---|
|
|
视频处理可能非常简单,比如使用边缘检测的示例中那样;也可能极其复杂,比如必须考虑目标在以前帧中的位置的跟踪算法。
有关高级视频处理的更多信息,请参阅以下示例:
步骤 4.写入视频
在处理后,您可以将视频的每个帧写回文件中。您可以使用以下函数创建视频文件:
>> vid_w = VideoWriter('newfile.avi'); >> open(vid_w)
变量 vid_w
可以累积新帧来创建视频。
一个完整的 MATLAB 示例
将所有组成部分放在一起形成完整的示例,展示读取、显示、处理和写入视频的步骤:
%% 将视频读取并处理到 MATLAB % 设置:创建视频读取程序和写入程序 videoFileReader = VideoReader('tilted_face.avi'); myVideo = VideoWriter('myFile.avi'); % 设置:创建可部署的视频播放器和人脸检测程序 depVideoPlayer = vision.DeployableVideoPlayer; faceDetector = vision.CascadeObjectDetector(); open(myVideo); %% 检测每帧中的人脸 while hasFrame(videoFileReader) % 读取视频帧 videoFrame = readFrame(videoFileReader); % 处理帧 bbox = faceDetector(videoFrame); videoFrame = insertShape(videoFrame, 'Rectangle', bbox); % 将帧显示到屏幕 depVideoPlayer(videoFrame); 将视频帧写入到最终文件中 writeVideo(myVideo, videoFrame); pause(1/videoFileReader.FrameRate); end close(myVideo)
您可以在 MATLAB Central 上下载此代码。
用于计算机视觉的视频处理算法
使用时间相关性进行视频处理的 MATLAB 算法基于“状态”的概念,即该算法不仅处理当前视频帧,而且使用之前的帧确定其输出。这对依赖之前信息来预知未来行动的目标跟踪算法至关重要。常见的跟踪示例是 KLT 算法,该算法通过追踪某个目标上的各个点来跟踪目标的位置。
视频处理算法的开发者还可以使用 Computer Vision System Toolbox 中特定于视觉应用的算法。利用这些算法,可以高效利用内存的方式快速地读取和查看高分辨率视频。该工具箱还包括用于 3D 点云处理、立体视觉、目标检测、跟踪和识别以及其他应用的算法。