基于帧差法的运动目标检测与跟踪系统
项目简介
本项目基于MATLAB平台开发,旨在实现一套高效的视频运动目标识别与跟踪系统。系统核心采用
帧差法(Frame Difference Method)原理,通过计算视频序列中相邻两帧图像的像素差异来捕捉运动变化。该系统不仅能够实时显示检测结果,还能生成包含处理过程(二值化掩膜)和最终结果(目标标记)的对比视频文件。
该方案适用于固定摄像头的场景,如视频监控、周界防范以及简单的交通流检测,能够有效克服背景中轻微的光照变化,准确锁定运动物体。
主要功能特性
- 交互式视频输入:支持用户通过图形界面直接选择本地视频文件(支持MP4, AVI, MOV, WMV等格式)。
- 实时图像处理:将彩色视频流实时转换为灰度图像,降低计算复杂度。
- 运动检测:利用相邻帧像素差分算法,精确提取运动前景。
- 抗噪与滤波:内置形态学处理流程(腐蚀、膨胀、空洞填充),有效去除噪点并连接断裂的目标区域。
- 智能标记:基于连通域分析,自动计算运动目标的质心与边界框,并排除面积过小的干扰区域。
- 可视化界面:提供双视图显示,左侧展示原始视频与追踪标记(红色矩形框+绿色质心),右侧展示算法处理后的二值化运动掩膜。
- 结果保存:自动将处理过程的完整可视化界面(包含对比视图)录制并保存为MPEG-4格式的视频文件。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
- Computer Vision Toolbox(计算机视觉工具箱,用于视频读写)
使用方法
- 启动MATLAB环境,确保工作路径已切换至脚本所在文件夹。
- 运行主程序函数。
- 系统将弹出文件选择窗口,请选择需要检测的视频文件。
- 程序将自动初始化并在新窗口中开始处理视频:
* 左侧窗口显示实时跟踪效果。
* 右侧窗口显示算法计算出的二值化运动区域。
- 处理过程中会自动保存结果视频文件(文件名前缀为
result_),保存在与原视频相同的目录下。 - 处理完成后,程序会自动释放资源并弹出完成提示框。
---
核心算法与代码实现逻辑
本系统的代码实现逻辑严格遵循以下流程:
1. 初始化与预处理
程序首先通过图形用户界面引导用户选择视频,建立视频读取对象(VideoReader)和视频写入对象(VideoWriter)。代码预设了MP4格式作为输出,并同步了源视频的帧率。在开始循环前,程序读取视频的第一帧并将其转换为灰度图,作为后续差分运算的初始参考帧(背景帧)。
2. 帧差法核心计算
在视频处理的主循环中,系统执行以下核心操作:
- 灰度转换:将当前读取的彩色帧转换为灰度图像,减少数据维度。
- 差分运算:计算当前帧与前一帧灰度图像的绝对查值。代码中特别将图像数据转换为双精度浮点数(double)进行运算,防止了uint8数据类型在相减时出现的溢出或截断问题。
- 二值化处理:根据预设的阈值(代码中设置为25),将差分图像转换为二值掩膜。大于阈值的像素点被判定为运动前景(白色),其余为背景(黑色)。
3. 数学形态学滤波
为提高检测质量,二值化后的图像经过了严格的形态学处理序列:
- 腐蚀(Erosion):使用3x3的矩形结构元素进行腐蚀操作,旨在去除背景中细小的白点噪声(椒盐噪声)。
- 膨胀(Dilation):使用6x6的矩形结构元素进行膨胀操作,用于填充目标内部的细小空洞,并将可能断裂的运动目标区域重新连接成一个整体。
- 孔洞填充(Hole Filling):填充封闭区域内的孔洞,确保目标区域的完整性。
4. 连通域分析与目标筛选
系统利用连通域分析函数(regionprops)提取二值图像中所有白色区域的属性,包括边界框(BoundingBox)、面积(Area)和质心(Centroid)。
- 面积滤波:代码设定了最小面积阈值(150像素)。只有面积大于该值的连通域才会被认定为有效目标,从而进一步滤除了光照突变或摄像机抖动引起的细微误检。
5. 可视化与跟踪
- 对于每一个通过筛选的目标,系统在原始视频帧上绘制红色的矩形边框(Bounding Box)和绿色的“+”字形质心点。
- 系统创建了一个包含两个子图的图形窗口:左侧显示带有标记的实景图,右侧动态显示二值化掩膜,以此直观展示算法的内部处理效果。
6. 更新与保存机制
- 参考帧更新:每一轮循环结束前,当前的灰度帧被赋值为“前一帧”,用于下一轮的差分计算。
- 完整录制:系统使用
getframe 函数捕获整个图形窗口(包含左右两个子图及标题信息),将其作为一帧写入输出视频文件中。这意味着输出视频不仅仅是标记后的原图,而是包含了算法分析视图的完整演示录像。