使用 MATLAB 进行视频处理

应用、示例和技术

常见应用

在视频应用领域,人们面临着常见且棘手的难题。要解决这些问题,需要灵活的分析和处理功能。使用 MATLAB® 和 Simulink® 产品,您可以开发视频处理解决方案,来应对视频稳定、视频拼接、目标检测和跟踪等常见难题。

对象跟踪

对象跟踪是避让行人、安防与监控以及增强现实等许多应用场景的重要组成部分。在此示例中,将使用卡尔曼滤波跟踪一个小球。

对象检测与计数

可以利用视频处理来检测并统计视频序列中移动的对象数目。在此案例研究中,澳大利亚的科学家使用录像片断来估计野生水鸟的种群数量。

运用 MATLAB 进行视频处理

MATLAB® 提供了用于查看、分析、读取和写入视频的工具和算法。视频处理在以下这些应用领域很有用:

视频处理对于深度学习、运动估计和自动驾驶等领域至关重要。查看 MATLAB 中的一个详细示例,了解如何处理、分析视频以及与之交互。

简单的 4 步视频处理

运用 MATLAB 进行视频处理涉及以下步骤:

  1. 读取视频
  2. 显示视频
  3. 处理视频
  4. 写入视频

步骤 1.读取视频

您可以从文件或直接从摄像机读取视频。

利用一条 MATLAB 命令便可从文件中读取视频:

 >> vid = VideoReader('filename.avi')

MATLAB 支持网络摄像头视频处理,Image Acquisition Toolbox™ 则可用于从许多工业和科学摄像机中实时采集视频。

MATLAB 让您能够使用各种编解码器读取视频文件,包括 Microsoft® Windows®、Mac 和 Linux® 操作系统特定的编解码器。

步骤 2.显示视频

MATLAB 中有两种显示视频的方法:

Video Viewer应用程序 可播放 MATLAB 电影、视频或图像序列。使用该应用程序可以开始、停止并以不同的速度播放视频,还可以跳转到视频的某一段。

步骤 3.处理视频

视频是由独立的视频帧或图像组成的序列。这意味着,设计用于图像边缘检测的算法能够快速转换为对视频执行边缘检测。

Read single image

Read image frame from video

current_image = imread('flowers.png');
edge(current_image);

current_image = readFrame(vid);
edge(current_image);

视频处理可能非常简单,比如使用边缘检测的示例中那样;也可能极其复杂,比如必须考虑对象在以前帧中的位置的跟踪算法。

有关高级视频处理的更多信息,请参阅以下示例:

步骤 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 点云处理、立体视觉、对象检测、跟踪和识别以及其他应用的算法。

示例

了解关于视频处理的更多信息

使用 GPU Coder,根据在 MATLAB 中编写的雾校正算法生成 CUDA 代码。
学习面向视频处理的FPGA硬件的注意事项,工作流,以及技巧
了解 MATLAB 如何应对在开发对象识别系统时遇到的常见挑战,查看用于深度学习、机器学习和计算机视觉的新功能。