内容发布更新时间 : 2025/1/2 0:37:11星期一 下面是文章的全部内容请认真阅读。
实验四 运动目标检测
一、实验目的
1、基本掌握运动目标提取的基本原理和方法;
2、采用两帧差分方法实现运动目标提取。
二、实验原理及知识点
运动目标检测是指在视频或序列图像中检测出变化区域并将运动目标从背景图像中提取出来。根据摄像头是否保持静止,运动检测分为静态背景和运动背景两类。大多数视频监控系统是摄像头固定的,因此静态背景下运动目标检测算法受到广泛关注,常用的方法有帧间差法、光流法、背景差分法等。
帧间差分法是最为常用的运动目标检测和分割方法之一,原理就是将前后两帧图像对应的像素值相减,在环境亮度变化不大的情况下,如果对应像素值相差值很小,可认为此处景物是静止的,反之,则是运动物体。方法不足在于对环境噪声较为敏感,阈值的选择相当关键,选择过低不足以抑制图像中的噪声,过高则忽略了图像中有用的变化。对于比较大的、颜色一致的运动目标,有可能在目标内部产生空洞,无法完整地提取运动目标。
当差值图像二值化后,可能有很多无用的噪声点,运动目标内部也可能产生
空洞,因此,需要采用数学形态学方法,对分割后的二值图像进行形态学滤波。
三、实验仪器与软件
1、PC 计算机
2、MatLab 软件/语言包括图像处理工具箱(Image Processing Toolbox)
3、实验所需要的视频或图像序列
四、 实验内容及步骤
1、了解 MATLAB 处理视频的基本命令 aviread 或 mmreader。
2、了解 MATLAB 形态学滤波中膨胀算子 imdilate 的使用方法,说明其作用。
3、了解形态学滤波中结构元 strel 命令的调用格式,通过改变结构元形状和大小,比较运动目标检测效果。
clc
clear
str=strel('square',3);
mov=mmreader('viptraffic.avi'); for i=20:mov.numberofframes-1
pic1=rgb2gray(read(mov,i)); pic2=rgb2gray(read(mov,i+1));
d=mat2gray(abs(double(pic1)-double(pic2))); t=graythresh(d); bw=im2bw(d,t); bw=imdilate(bw,str);
imshow(bw,'notruesize');pause(0.05); end 或者
clc clear all
str=strel('square',3); T=0.3; for i=1:530
name1=strcat(num2str(i),'.jpg'); name2=strcat(num2str(i+1),'.jpg'); pic1=rgb2gray(imread(name1)); pic2=rgb2gray(imread(name2));
d=mat2gray(abs(double(pic1)-double(pic2))); t=graythresh(d); bw=im2bw(d,t); bw=imdilate(bw,str);
if sum(bw(:))/size(pic1,1)/size(pic1,2)>T
bw(:)=0;
end
imshow(bw);pause(0.01); end
五、实验结果
clc
clear all
str=strel('square',3); T=0.3;
for i=1:530
name1=strcat(num2str(i),'.jpg'); name2=strcat(num2str(i+1),'.jpg'); pic1=rgb2gray(imread(name1)); pic2=rgb2gray(imread(name2));
d=mat2gray(abs(double(pic1)-double(pic2))); t=graythresh(d); bw=im2bw(d,t);
bw=imdilate(bw,str);
if sum(bw(:))/size(pic1,1)/size(pic1,2)>T bw(:)=0; end
imshow(bw);pause(0.01); end
('square',2);
('line,5,45);