%%基于背景差分的运动目标捕捉
close all;
clear
clc
%%%%%%%%%%%%%%%%%%根据一幅目标全可见的图像圈定跟踪目标%%%%%%%%%%%%%%%%%%%%%%%
ZMIN=0;
ZMAX=0;
nStar =1 ;%起始帧数
sm=VideoReader('vipmen.mp4');
nNUM = 280;
imu=zeros(120,160);%建立一个与图片尺寸相当的空矩阵保存均值
imxigema=zeros(120,160);%建立一个与图片尺寸相当的空矩阵保存方差
qiuhe=zeros(120,160);%建立一个与图片尺寸相当的空矩阵保存和
for k1=nStar:13 %13的含义是选取的背景帧数到13帧为止
qiuhe=qiuhe+double(rgb2gray(read(sm,k1)));
end
imu=qiuhe/(13-nStar+1);%求出均值
for k2=nStar:13
qiuhe=qiuhe+(double(rgb2gray(read(sm,k2)))-imu).^2;
end
imxigema=sqrt(qiuhe/(13-nStar+1));%求出方差
Background = imu;%第一帧当做初始背景
% 背景更新过程,其中int2str将整型常量转为字符串
for k = nStar+1 : nNUM
CurrentImage =double(rgb2gray(read(sm,k))); % 当前帧
FormerImage =double(rgb2gray(read(sm,k-1))); % 前一帧
ID =uint8(abs( CurrentImage - FormerImage )); % 帧间差分
%%%%%%%%%%%%%%%以下为迭代法求阈值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f=ID;
[sx,sy]=size(f);
%灰度直方图
h=imhist(f);
%累积直方图
vmax = 256 ; H(1:vmax)=0; H(1)=h(1);
for i=2:vmax
H(i) = H(i-1) + h(i);
end
% 归一化直方图
h1 = h / (sx * sy);
%归一累积直方图
H1 = H/(sx*sy);
%求初始值
% 初始值设定
% 初始值设定
ZMAX=max(max(f));
ZMIN=min(min(f));
T0=(ZMAX+ZMIN)/2;%取中值作为初始阈值分割
%迭代法
while 1
FZ1=0;FZ2=0; %分子
for i=1:256
if i<T0
FZ1=FZ1+(i-1)*h1(i);
else
FZ2=FZ2+(i-1)*h1(i);
end
end
u1=FZ1/H1(T0);
u2=FZ2/(1-H1(T0));
T1=(u1 + u2)/2;
if abs(T0-T1)<1
%求出灰度值比例
level = double(T0);
level = level / 255;
break;
else
T0=abs(uint8(T1));
end
end
%%%%%%%%%%%%%%%%%%%以上代码均可独立为一个函数进行调用%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BW = im2bw(ID,level);
%%%%%%%%%%%%%%%%%%%更新背景,利用高斯背景模型进行%%%%%%%%%%%%%%%%%%%%%%%%%%
alpha = 0.05; %背景更新的速度
%高斯背景建模
id =abs(abs(Background-imu).*BW-(2.*imxigema+0.02).*BW);
id(id<0)=0;
CurrentBack=id+( alpha.* CurrentImage + ( 1-alpha ).* Background ).*( 1 -BW );
Background = CurrentBack;%背景更新完毕
%计算新的均值与方差,重新建立当前背景的模型
imu=(qiuhe+CurrentImage)/(13+k-1);
imxigema=sqrt(qiuhe+(CurrentImage-imu).^2)/(13+k-1);
%%%%%%%%%%%%%%%%%%背景处理完毕%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Cut=abs(CurrentImage-Background);%前景与背景差分
Cut=uint8(Cut);
%%%%%%%%%%%%%%%以下为迭代法求阈值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f=Cut;
[sx,sy]=size(f);
%灰度直方图
h=imhist(f);
%累积直方图
vmax = 256 ; H(1:vmax)=0; H(1)=h(1);
for i=2:vmax
H(i) = H(i-1) + h(i);
end
% 归一化直方图
h1 = h / (sx * sy);
%归一累积直方图
H1 = H/(sx*sy);
%求初始值
% 初始值设定
% 初始值设定
ZMAX=max(max(f));
ZMIN=min(min(f));
T0=(ZMAX+ZMIN)/2;%取中值为初始阈值
%迭代法
while 1
FZ1=0;FZ2=0; %分子
for i=1:256
if i<T0
FZ1=FZ1+(i-1)*h1(i);
else
FZ2=FZ2+(i-1)*h1(i);
end
end
u1=FZ1/H1(T0);
u2=FZ2/(1-H1(T0));
T1=(u1 + u2)/2;
if abs(T0-T1)<1
%求出灰度值比例
level = double(T0);
level = level / 255;
break;
else
T0=abs(uint8(T1));
end
end
%%%%%%%%%%%%%%%%%%%以上代码均可独立为一个函数进行调用%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BWCut=im2bw(Cut,level);%差分后的图像进行二值化
SE=[1 1 1;1 1 1;1 1 1];%结构元素
BWCutero=imerode(BWCut,SE);%对二值图像进行腐蚀,以消除微小变动的区域
BWCuterodil = bwmorph(BWCutero,'dilate',7);%膨胀
figure(1)
imshow(read(sm,k));title('目标捕捉')
%%%%%%%%%%%%%%%%%%框选目标%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[L,nm] = bwlabel(BWCuterodil,8);%找出图像中的八连通区域,视为车辆所在的区域
da=0;
shu=[0,0,0,0];
for i = 1:nm
[r,c] = find(L == i);
left= min(c);
right= max(c);
top= min(r);
buttom= max(r);
width=right - left + 1;
height = buttom - top + 1;
rectangle('Position',[left,top,width,height],'EdgeColor','y');%对车辆用矩形标记
S=width*height;
if da<S
da=S;
shu=[left,top,width,height];
end
pause (0.01)
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
【目标跟踪】基于matlab背景差分多目标捕捉【含Matlab源码 810期】.zip
共4个文件
jpg:2个
mp4:1个
m:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 185 浏览量
2023-11-27
20:53:19
上传
评论
收藏 419KB ZIP 举报
温馨提示
CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 目标跟踪:差分背景车辆检测、Kalman卡尔曼滤波、最大互信息、光流法
资源推荐
资源详情
资源评论
收起资源包目录
【目标跟踪】基于matlab背景差分多目标捕捉【含Matlab源码 810期】.zip (4个子文件)
【目标跟踪】基于matlab背景差分多目标捕捉【含Matlab源码 810期】
运行结果2.JPG 32KB
运行结果1.JPG 31KB
zeshizeshizeshi.m 4KB
vipmen.mp4 383KB
共 4 条
- 1
资源评论
海神之光
- 粉丝: 5w+
- 资源: 6086
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【Unity ARPG框架】ARPG Project 快速构建和迭代动作角色扮演游戏
- Java中实现数组反转与数据库去重的深度整合
- 【Unity场景构建工具】Prefab World Builder 使用Prefabs快速生成和编辑大型环境
- java数组反转 的四种方法 超实用
- 本科阶段最后一次竞赛Vlog-2024年智能车大赛智慧医疗组准备全过程-9二维码识别附件
- ++i和i++的区别 c/c++开发中
- 2076 -112 IBM V7000 firmware 7.8.1.16
- 0-1背包限界剪枝.cpp
- 基于MATLAB图像腐蚀膨胀代码面板GUI(1).zip
- 随堂练习编程题的参考代码c4.c
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功