一、简介

目标检测是将运动的物体从背景中检测出来,人们希望设计能适用于各种监控环境,不受光照、天气等外界因素影响的目标检测算法。但这种算法难免复杂度大,现有一些算法大多是针对某一类问题提出的,主要包括背景减法、相邻帧差法和光流法等。

1背景减法
背景减法(backgroundsubtraction)是目前运动目标检测的主流方法,其基本思想是将当前每一帧图像与事先存储或实时获取的背景图像相减,计算出与背景偏离超过一定阀值的区域作为运动区域。该算法实现简单,相减结果直接给出目标的位置、大小、形状等信息,能够提供关于运动目标区域的完整描述,特别是对于摄像机静止的情况,背景减法是实现运动目标实时检测和提取的首选方法。
背景减法实现的关键是背景模型的获取和更新。背景获取算法通常要求在场景中存在运动目标的情况下获取背景图像,更新过程使背景能够适应场景的各种变化和干扰,如外界光线的改变,背景中对象的扰动和固定对象的移动,阴影的影响等。一种典型的背景建模方法是用混合高斯模型描述背景图像像素值的分布,目标检测过程中判断图像的当前像素值是否符合该分布,若是被判为前景点,否则为背景点。同时根据新获取的图像,对背景图像参数进行自适应更新。该方法能够可靠处理光照变化、背景混乱运动的干扰以及长时间的场景变化等。在此基础上,对背景、静止目标和运动目标三者采取不同的更新策略,以减弱背景更新过程中运动目标对背景的影响。

2 BS算法
OpenCV提供的BS算法:
图像分割(GMM - 高斯混合模型)
机器学习(KNN - K个最近邻)
以下代码将通过GMM和KNN两种方法,实现了实时检测运动目标效果的对比。

二、源代码

%%基于背景差分的运动目标捕捉
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:13qiuhe=qiuhe+(double(rgb2gray(read(sm,k2)))-imu).^2;
end
imxigema=sqrt(qiuhe/(13-nStar+1));%求出方差
Background = imu;%第一帧当做初始背景
% 背景更新过程,其中int2str将整型常量转为字符串
for k = nStar+1 : nNUMCurrentImage =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:vmaxH(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 1FZ1=0;FZ2=0; %分子for i=1:256if i<T0FZ1=FZ1+(i-1)*h1(i);elseFZ2=FZ2+(i-1)*h1(i);endendu1=FZ1/H1(T0);u2=FZ2/(1-H1(T0));T1=(u1 + u2)/2;if abs(T0-T1)<1%求出灰度值比例level = double(T0);level = level / 255;break;elseT0=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:vmaxH(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 1FZ1=0;FZ2=0; %分子for i=1:256if i<T0FZ1=FZ1+(i-1)*h1(i);elseFZ2=FZ2+(i-1)*h1(i);endendu1=FZ1/H1(T0);u2=FZ2/(1-H1(T0));T1=(u1 + u2)/2;if abs(T0-T1)<1%求出灰度值比例level = double(T0);level = level / 255;break;elseT0=abs(uint8(T1));end

三、运行结果


四、备注

版本:2014a

【目标跟踪】基于matlab背景差分多目标捕捉【含Matlab源码 810期】相关推荐

  1. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  2. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  3. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  4. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  5. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  6. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  7. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  8. 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】

    一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...

  9. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  10. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

最新文章

  1. 运行hadoop自带的wordcount例子
  2. 男人必看:最近在网上流传甚广的一个帖子
  3. 用python读取stata文件及写入and注意事项
  4. 1583. 统计不开心的朋友
  5. Git笔记(37) 替换
  6. 力扣编辑距离系列问题总结
  7. Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
  8. application使用@符合问题:‘@‘ that cannot start any token
  9. vue-cli3.0升级失败,vue-cli卸载不掉,vue-cli升级不了3.0,
  10. 优秀ui设计网站分享整理
  11. 正在配置更新请勿关闭计算机怎么办,电脑开机“显示正在配置更新请勿关闭计算机”该怎么办?...
  12. 联通BSS-ESS-CBSS系统安装相关
  13. 快乐牛牛终极板creator1.82 shader 挫牌代码
  14. Linux文件目录sha256,在Linux系统中使用SHA256来校验下载的文件的方法
  15. r ridge回归_手把手带你画高大上的lasso回归模型图
  16. 业务中台系统架构:大中台+小前台电子商务系统搭建框架思维
  17. 【C++Primer笔记】第一章 开始
  18. simulink模块,提供xpctarget下驱动源码
  19. windows7 x64系统 不能安装MTP驱动
  20. HTTP常用状态码状态码大全

热门文章

  1. 智慧解析第20集:破解迷魂术
  2. opengl 加载贴图Unknown DIB file format问题
  3. Atitit 软件设计中的各种图纸 uml 之道 1. 常见设计成果与图纸 2 1.1. 总图 2 1.2. ui原型图与html 2 1.3. 业务逻辑 伪代码 各种uml图 2 1.4. 总体
  4. Atitit q2016 q5 doc list on home ntpc.docx
  5. Atitit 图像处理—图像形态学(膨胀与腐蚀)
  6. Atitit.信息论原理概论attilax总结
  7. atitit.基于  Commons CLI 的命令行原理与 开发
  8. atitit.提升稳定性---hibernate 增加重试retry 机制解决数据库连接关闭
  9. (转)以太坊(Ethereum ETH)是如何计算难度的
  10. (转)Rust :文件分层