以前上计算机视觉课时,老师演示了一个移动目标检测的程序。觉得好玩,回去后自己写了一个。
基于帧间差分法+阈值(门限)的移动目标检测。检测前进行了中值滤波处理,手动设置了阈值。效果一般吧。
clear all;
close all;
clc;
mov=VideoReader('classroom.avi');
N=mov.NumberOfFrames;
for i=2:N
frame=read(mov,i);
Pframe=read(mov,i-1);
if ndims(frame)==3
x=rgb2gray(frame);
else
x=frame;
end
if ndims(Pframe)==3
y=rgb2gray(Pframe);
else
y=Pframe;
end
subplot(1,2,1);
imshow(Pframe,[]);
title(sprintf('第%d帧',i-1))
%差分算法
x=medfilt2(x);
y=medfilt2(y);
n=im2double(x);
p=im2double(y);
c=n-p;
c=medfilt2(c);
t=10/256;
c(abs(c)>=t)=255;
c(abs(c)<t)=0;
c=logical(c);
x1=Pframe(:,:,1);
x1(c)=0;
x2=Pframe(:,:,2);
x2(c)=255;
x3=Pframe(:,:,3);
x3(c)=0;
xc=cat(3,x1,x2,x3);
subplot(1,2,2);
imshow(xc,[]);
title(sprintf('第%d帧',i-1))
end
本文介绍了一种基于帧间差分法和阈值处理的移动目标检测程序,通过中值滤波预处理,实现了对视频中移动物体的识别。详细解释了程序的实现步骤和关键算法原理。
2814





