基于帧差法的运动目标检测与分割系统
项目介绍
本项目是一个基于MATLAB平台开发的视频运动目标检测系统。该系统利用帧间差分法(Frame Difference Method)的核心原理,通过计算视频序列中相邻两帧的像素差异来捕捉运动区域。
该代码实现了一个完整的端到端流程:从视频输入(支持文件选择或自动生成合成测试视频)、预处理、核心差分算法、二值化分割、形态学去噪,到最终的连通域分析与可视化标记。系统设计注重代码的独立性,通过自定义绘图函数减少了对MATLAB高级计算机视觉工具箱的依赖,并通过双视图实时展示检测效果。
主要功能特性
- 实时运动检测:采用相邻帧差法($Frame_t - Frame_{t-1}$),计算资源消耗低,背景更新速度快,适合实时性要求高的场景。
- 智能输入处理:
* 支持读取 AVI, MP4, MOV 等常见格式视频文件。
*
自动演示模式:如果用户取消文件选择,系统会自动生成一段包含动态目标(移动矩形和球体)及噪声的合成视频,用于演示算法效果。
- 抗噪处理:集成形态学滤波(开运算、闭运算、孔洞填充)和面积阈值过滤,有效去除环境噪声干扰。
- 自定义可视化组件:内置自定义的图形绘制函数,不依赖 Computer Vision Toolbox 即可在图像上绘制边界框(Bounding Box)和质心标记。
- 双屏可视化界面:实时窗口同时显示“原始视频+目标标记”与“二值化前景掩膜”,便于分析算法的分割阈值效果。
系统算法与实现逻辑
本项目 main.m 的核心处理流程严格遵循以下逻辑:
1. 初始化与参数设置
系统首先清理工作环境,并设定关键算法参数:
- 差分阈值 (Threshold):设置为 30,用于区分背景噪声与显著运动变化。
- 最小目标面积 (MinArea):设置为 100 像素,小于该面积的连通域将被视为噪点并忽略。
- 形态学结构元素:使用半径为 3 的圆盘形结构元素进行滤波。
2. 视频源获取
程序启动时弹出文件选择对话框。若用户未选择文件,代码会调用内部函数动态生成一个包含红色背景、白色移动块和绿色移动物体的临时 AVI 视频文件,确保程序在无素材情况下也能运行。
3. 图像预处理
- 读取视频帧后,通过自定义的
rgb2gray_custom 函数将其转换为灰度图像。该函数使用标准的加权公式 ($0.2989 R + 0.5870 G + 0.1140 B$) 确保转换的准确性,同时兼容单通道灰度输入。
4. 帧差法核心运算
- 差分计算:获取当前帧 ($I_k$) 与前一帧 ($I_{k-1}$) 的灰度图,计算两者的绝对差值:$|I_k - I_{k-1}|$。
- 二值化:将差分图像与预设阈值(30)比较,生成二值掩膜(Binary Mask)。变化显著的区域标记为前景(1),静止区域标记为背景(0)。
5. 后处理与分析
为了提高检测质量,对二值掩膜进行一系列形态学操作:
- 开运算 (Open):去除孤立的细小噪点。
- 闭运算 (Close):平滑边界,连接断裂的目标区域。
- 孔洞填充 (Fill Holes):填充运动目标内部可能出现的空洞。
随后使用 bwlabel 进行连通域分析,并计算每个连通域的边界框 (BoundingBox)、面积 (Area) 和 质心 (Centroid)。
6. 目标标记与显示
- 遍历所有连通域,过滤掉面积小于 100 像素的区域。
- 边界框绘制:通过
insertShape_custom 函数,直接在RGB像素层面上修改图像数据,绘制绿色矩形框。 - 质心绘制:通过
insertMarker_custom 函数绘制红色的十字标记。 - 文字信息:通过图形窗口的
title 显示当前帧的目标检测数量和阈值信息(由于代码中自定义文本绘制函数仅保留了接口未做像素修改,因此主要依靠标题栏反馈状态)。 - 最终通过
imshow 将标记后的原图与转为RGB格式的掩膜图并排显示。
7. 模型更新
在循环末尾,将当前帧的灰度图赋值给“前一帧”变量,作为下一轮循环的背景模型。
关键辅助函数说明
为了保证代码的轻量化和低依赖性,脚本中实现了以下辅助功能:
实现鲁棒的灰度转换,判断输入图像维度,若是三通道则按光学加权公式转换,若是单通道则直接返回,防止报错。
简易的几何图形绘制引擎。它通过直接操作矩阵的行列索引,在图像的指定坐标处将像素值修改为绿色([0, 255, 0]),从而画出具有指定线宽的矩形框。
简易的标记绘制引擎。原理同上,在目标质心位置绘制十字形线条。
合成视频生成器。当未提供视频源时,该函数会创建一个黑色背景的视频流,并模拟两个运动物体(一个水平移动的白色方块,一个对角线移动的绿色方块),同时叠加随机噪声,用于验证算法的抗噪性和检测能力。
使用方法
- 在 MATLAB 环境中直接运行
main 函数。 - 在弹出的文件选择窗口中:
*
选择视频:选中本地的
.avi,
.mp4 或
.mov 文件开始检测。
*
取消选择:直接点击“取消”,系统将自动生成并处理一段合成测试视频。
- 运行过程中,观察弹出的图形窗口。左侧显示检测结果,右侧显示算法内部的二值化判定过程。
- 关闭图形窗口即可终止程序运行。
系统要求
- MATLAB R2014a 或更高版本(代码基础语法兼容性较好)。
- 无需安装 Computer Vision Toolbox(核心绘图功能已内置实现)。