MATLAB视频运动目标检测参考源码

MATLAB视频运动目标检测参考源码

将视频截取成帧

fileName = 'q.avi'; %此处输入视频名称,要带后缀,注意好像只有wmv和avi格式

obj = VideoReader(fileName);

numFrames = obj.NumberOfFrames;% 帧的总数

for k = 1 :numFrames% 读取数据

frame = read(obj,k);

imshow(frame);

imwrite(frame,strcat(num2str(k),'.jpg'),'jpg');% 保存帧

End


灰度二值化图像

for i=1:numberofframe%numberofframe为图像张数

imageName=strcat(num2str(i),'.jpg');

I = imread(imageName);

imggray = rgb2gray(I);%灰度化图像

imwrite(imggray,strcat(num2str(i),'huidu.jpg'),'jpg');% 保存帧

i2=im2bw(I);% i2是二值图像,不需要求阈值

imwrite(i2,strcat(num2str(i),'erzhi.jpg'),'jpg');% 保存帧

end

背景差分法

filename = '103.jpg';%读原图

I = imread(filename);

X = rgb2gray(I);%读,灰度原图

filename = 'YCBJ.jpg';%读取背景图

M = imread(filename);

Y = rgb2gray(M);%读,灰度背景图

Z = imabsdiff(X,Y);%两图相减

level = graythresh(Z);

Z = im2bw(Z,level);%二值化图

% 膨胀腐蚀算子,相当于闭操作

se = strel('disk',2);

Q=imerode(Z,se);%腐蚀

Q=imdilate(Q,se);%膨胀

lab1='原图';

lab4='腐蚀膨胀后';

subplot(221);imshow(I);title(lab1);

subplot(222);imshow(M);title(lab2);

subplot(223);imshow(Z);title(lab3);

subplot(224);imshow(Q);title(lab4);

三帧差分法

filename1='110.jpg';%读取前一帧

I1 = imread(filename1);

O = rgb2gray(I1);%读,灰度前一帧

filename2='115.jpg';%读取中间帧图像

I2 = imread(filename2);

P = rgb2gray(I2);%读,灰度当前帧

filename3='120.jpg';%读取后一帧图像

I3 = imread(filename3);

Q = rgb2gray(I3);%读,灰度后一帧

A = imabsdiff(P,O);

level1 = graythresh(A);

A = im2bw(A,level1);%二值化前两帧差图

subplot(131);imshow(A);

B = imabsdiff(Q,P);

level = graythresh(B);

B = im2bw(B,level);%二值化后两帧差图

subplot(132);imshow(B);

for i=1:480

for j=1:720

C(i,j)=A(i,j)*B(i,j);

end

end

subplot(133);imshow(C);%二AB两图相与

帧差分循环读写

for i=1:numberofframe%numberofframe为帧数

filename=strcat(num2str(i),'.jpg');

I = imread(filename);

X = rgb2gray(I);%读,灰度原图

filename = 'YCBJ.jpg';

M = imread(filename);

Y = rgb2gray(M);%读,灰度背景图

Z = imsubtract(Y,X);%两图相减

level = graythresh(Z);

Z = im2bw(Z,level);%二值化图

% 膨胀腐蚀算子,相当于闭操作

imwrite(Z,strcat(num2str(i),'Chafenghou.jpg'),'jpg');% 保存帧

end

掩模处理

D = imread('zhan.jpg');

%掩模处理

for j=1:720

for i=1:480

if(j<-2.39*i+765)

D(i,j)=0;

end

if(j>0.8*i+460)

D(i,j)=0;

end

if(i<140)

D(i,j)=0;

end

end

end

图像对称翻转

AA=imread('b.jpg');%文件名是你自己的哦

for k=1:3

B(:,:,k)=fliplr(AA(:,:,k));%左右翻转

end

imwrite(B,'obj.jpg','jpg');% 保存帧

简单的判断摔倒

BJ=imread('YCBJ.jpg');% 读取有物体彩色图片

fileName = '6.avi';

obj = VideoReader(fileName);

numFrames = obj.NumberOfFrames;% 帧的总数

for k = 1 :numFrames% 读取数据

T = read(obj,k);

A=imsubtract(BJ,T);

level = graythresh(A);

B = im2bw(A,level);%二值

for j=1:720

for i=1:480

if(j<-2.39*i+765)

B(i,j)=0;

end

if(j>0.8*i+460)

B(i,j)=0;

end

if(i<140)

B(i,j)=0;

end

end

end

% imwrite(B,strcat(num2str(k),'.jpg'),'jpg');% 保存帧

figure(1);

imshow(B);

[bwl,ln]=bwlabel(B,8);

STATS=regionprops(bwl,'Area');

a=0;

for n=1:ln

if(STATS(n).Area>500)

abc=(bwl==n);

[c,r]=find(abc==1);

a=a+1;

xbegin=min(r);

ybegin=min(c);

xlength=max(r)-xbegin;

ylength=max(c)-ybegin;

p=ylength/xlength;

if(p<=1)

hold on

rectangle('Position',[xbegin,ybegin,xlength,ylength],'EdgeColor','R','linewidth',3);

hold off

end

end

end

end

改善后的判断摔倒

BJ=imread('YCBJ.jpg');% 读取有物体彩色图片

fileName = '13.wmv';

obj = VideoReader(fileName);

numFrames = obj.NumberOfFrames;% 帧的总数

H=zeros(1,1);

S=zeros(1,1);

for k = 1:numFrames% 读取数据

T = read(obj,k);

A=imsubtract(BJ,T);

level = graythresh(A);

B = im2bw(A,level);%二值

for j=1:720

for i=1:480

if(i<140)

B(i,j)=0;

end

end

end

% imwrite(B,strcat(num2str(k),'.jpg'),'jpg');% 保存帧

figure(1);

imshow(T);

[bwl,ln]=bwlabel(B,8);

STATS=regionprops(bwl,'Area');

a=0;

for n=1:ln

if(STATS(n).Area>50)

abc=(bwl==n);

[c,r]=find(abc==1);

xbegin=min(r);

ybegin=min(c);

xlength=max(r)-xbegin;

ylength=max(c)-ybegin;

p=ylength/xlength;

if(p<=1)

x=max(c);

y = 39.916*x-10881;

y1=y*0.8566;

y2=y*1.1434;

if(STATS(n).Area<y2&&STATS(n).Area>y1)

a=a+1;

H(k,a)=max(c);

S(k,a)=STATS(n).Area;

hold on

rectangle('Position',[xbegin,ybegin,xlength,ylength],'EdgeColor','R','linewidth',3);

hold off

end

end

end

end

End

将目标区域值存入矩阵数据分析

BJ=imread('YCBJ.jpg');% 读取有物体彩色图片

fileName = '1.avi';

obj = VideoReader(fileName);

numFrames = obj.NumberOfFrames;% 帧的总数

H=zeros(1,1);

S=zeros(1,1);

for k = 1:numFrames% 读取数据

T = read(obj,k);

A=imsubtract(BJ,T);

level = graythresh(A);

B = im2bw(A,level);%二值

imshow(B);

% imwrite(B,strcat(num2str(k),'.jpg'),'jpg');% 保存帧

[bwl,ln]=bwlabel(B,8);

STATS=regionprops(bwl,'Area');

a=0;

for n=1:ln

if(STATS(n).Area>400)

abc=(bwl==n);

[c,r]=find(abc==1);

a=a+1;

H(k,a)=max(c);%将联通区域底部坐标放到矩阵H中

S(k,a)=STATS(n).Area;%将联通区域面积坐标放到矩阵S中

end

end

end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值