前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >运动目标检测|单高斯背景建模

运动目标检测|单高斯背景建模

作者头像
小白学视觉
发布于 2019-10-24 06:21:18
发布于 2019-10-24 06:21:18
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

背景建模也称为背景估计,其主要目的是根据当前的背景估计,把对序列图像的运动目标检测问题转化为一个二分类问题,将所有像素划分为背景和运动前景两类,进而对分类结果进行后处理,得到最终检测结果。比较简单的获取背景图像的方法是当场景中无任何运动目标出现时捕获背景图像,但这种方法不能实现自适应,通常仅适应于对场景的短时间监控,不能满足智能监控系统对背景建模的要求。

背景减除法的关键是背景模型,它是背景减除法分割运动前景的基础。背景模型主要有单模态和多模态两种,前者在每个背景像素上的颜色分布比较集中,可以用单分布概率模型来描述,后者的分布则比较分散,需要多分布概率模型来共同描述。在许多应用场景,如水面的波纹、摇摆的树枝、飘扬的旗帜、监视器屏幕等,像素值都呈现出多模态特性。最常用的描述场景背景像素颜色分布的概率密度函数是高斯分布。

单高斯背景建模

高斯背景模型是一种运动目标检测过程中提取并更新背景和前景的一种方法。

单分布高斯背景模型认为,对一个背景图像,特定像素亮度的分布满足高斯分布,即对背景图像B,每一个点(x,y)的亮度满足B(x,y)~N(u,d):

即每一个点(x,y)都包含了两个属性,均值u和方差d:

计算一段时间内的视频序列图像中每一个点的均值u和方差d,作为背景模型。对于一幅包含前景的任意图像G,对于图像上的每一个点(x,y)计算,若:

(T为一个常数阈值),则认为该点是背景点,否则为前景点。接下来就背景的更新,每一帧图像都参与背景的更新:

其中,p为一个常数,用来反映背景更新率,p越大,背景更新的越慢。一般情况下,背景更新后d的变化很小,所以在更新背景以后一般不再更新d。

MATLAB仿真及输出结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Author:Ziheng H. Shen @Tsinghua Univ.
%Date:20170308  @Digital Image Process Practice
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all  
%% 读入视频,并记录帧率
fileName = '768x576.avi';   
Video = VideoReader(fileName);  
numFrames = Video.NumberOfFrames;  
frame = read(Video,1);  
%% 用第一帧图像数据初始化背景模型
alpha   = 0.03;     %背景建模alpha值  
stdInit = 20;       %初始化标准差  
varInit = stdInit * stdInit ;    %初始化方差  
lamda   = 2.5*1.2 ; %背景更新参数   
[h,w] = size(frame);%提取第一帧图像的高度和宽度  
w = w/3;  %彩色图像RGB,所以需要除以3  
for i=1:h  
    for j=1:w  
        pixel_R = frame(i,j,1); pixel_G = frame(i,j,2);  pixel_B = frame(i,j,3);  
        %期望图像为原图,背景
        pixel_uR = pixel_R;  pixel_ug = pixel_G;  pixel_ub = pixel_B;  
        %前景图像初始化为0  
        pixel_dr = 0;  pixel_dg = 0;  pixel_db = 0;  
        %标准差 
        pixel_stdr = stdInit;  pixel_stdg = stdInit;  pixel_stdb = stdInit; 
        %方差
        pixel_varr = varInit;  pixel_varg = varInit;  pixel_varb = varInit;  
          
        frame_u(i,j,1:3)   = [pixel_uR pixel_ug pixel_ub];  
        frame_d(i,j,1:3)   = [pixel_dr pixel_dg pixel_db];  
        fram_std(i,j,1:3)  = [pixel_stdr pixel_stdg pixel_stdb];  
        frame_var(i,j,1:3) = [pixel_varr pixel_varg pixel_varb];       
    end  
end   
%% 单高斯背景更新  
 for k = 1 : 5%numFrames % 读取帧数据  
     frame = read(Video,k);  
     for i=1:h   
         for j=1:w  
              pixel_R = frame(i,j,1);   pixel_G = frame(i,j,2);  pixel_B = frame(i,j,3);  
              %期望图像(背景),初始化为第一帧图  
              pixel_uR = frame_u(i,j,1);  pixel_ug = frame_u(i,j,2);  pixel_ub = frame_u(i,j,3);  
              %前景图像,初始为0 
              pixel_dr =  frame_d(i,j,1);  pixel_dg =  frame_d(i,j,2);  pixel_db =  frame_d(i,j,3); 
              %标准差  
              pixel_stdr =  fram_std(i,j,1);  pixel_stdg =  fram_std(i,j,2);  pixel_stdb =  fram_std(i,j,3);  
              %方差   
              pixel_varr = frame_var(i,j,1);  pixel_varg = frame_var(i,j,2);  pixel_varb = frame_var(i,j,3); 
              %|I-u|<lamda*std时认为是背景,进行背景更新  
              if(  (abs(pixel_R-pixel_uR)<lamda*pixel_stdr) &&...
                   (abs(pixel_G-pixel_ug)<lamda*pixel_stdg) &&...
                   (abs(pixel_B-pixel_ub)<lamda*pixel_stdb)      )  
  
                  %更新期望,u=(1-alpha)*u+alpha*1  
                  pixel_uR = (1-alpha)* pixel_uR + alpha * pixel_R;  
                  pixel_ug = (1-alpha)* pixel_ug + alpha * pixel_G;  
                  pixel_ub = (1-alpha)* pixel_ub + alpha * pixel_B;     
                  %更新方差var=(1-alpha)*var+alpha*(I-u)^2  
                  pixel_varr = (1-alpha)*pixel_varr + alpha*(pixel_R-pixel_uR)^2;  
                  pixel_varg = (1-alpha)*pixel_varg + alpha*(pixel_G-pixel_ug)^2;  
                  pixel_varb = (1-alpha)*pixel_varb + alpha*(pixel_B-pixel_ub)^2;    
                  %更新标准差  
                  pixel_stdr = sqrt(double(pixel_varr));  
                  pixel_stdg = sqrt(double(pixel_varg));  
                  pixel_stdb = sqrt(double(pixel_varb));  
                  %图像内容更新  
                  frame_u(i,j,1:3) = [pixel_uR pixel_ug pixel_ub];   
                  fram_std(i,j,1:3) = [pixel_stdr pixel_stdg pixel_stdb];  
                  frame_var(i,j,1:3) = [pixel_varr pixel_varg pixel_varb];         
              else  
                pixel_dr =  pixel_R -  pixel_uR;  
                pixel_dg =  pixel_G -  pixel_ug;  
                pixel_db =  pixel_B -  pixel_ub;  
                frame_d(i,j,1:3) = [pixel_dr pixel_dg pixel_db];  
              end  
         end  
     end  
     figure(2*k-2)  %查看每一帧循环下来的结果 
     imshow(frame_u); %背景
     figure(3*k-1)
     imshow(frame_d); %前景
     figure(3*k)  %先腐蚀后膨胀
     disk = strel('disk',1); 
     frame_d = imdilate(imerode(frame_d,disk),disk),disk;
     imshow(frame_d); %前景
 end

输出结果(背景->前景->目标检测)

需要说明的是,单高斯模型受初始化参数和第一帧图像影响很大。

本文由作者首发CSDN,经授权转载 原文地址:https://blog.csdn.net/shenziheng1/article/details/60881160

推荐阅读

为什么深度学习不能取代传统的计算机视觉技术?

原来CNN是这样提取特征的

SLAM问题的历史及基本表示

综述| 图像分割技术介绍

综述| 人体骨骼关键点检测

深度相机原理揭秘| 双目立体视觉

深度相机原理揭秘| 飞行时间(TOF)

深度相机原理揭秘| 结构光

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
运动目标检测|混合高斯背景建模(含源码)
混合高斯背景建模是基于像素样本统计信息的背景表示方法,利用像素在较长时间内大量样本值的概率密度等统计信息(如模式数量、每个模式的均值和标准差)表示背景,然后使用统计差分(如3σ原则)进行目标像素判断,可以对复杂动态背景进行建模,计算量较大。
小白学视觉
2019/10/24
2.7K0
混合高斯背景建模原理_高斯图模型
在运动目标检测提取中,背景目标对于目标的识别和跟踪至关重要。而建模正是背景目标提取的一个重要环节。
全栈程序员站长
2022/11/16
6380
混合高斯背景建模原理_高斯图模型
学习—用 Python 和 OpenCV 检测和跟踪运动对象
学习了pyimagesearch 的《PyImageSearch Gurus course》。现在记录下代码的分析。
十四君
2019/11/23
3K0
学习—用 Python 和 OpenCV 检测和跟踪运动对象
OpenCV视频分析背景提取与前景提取
OpenCV中支持的两种背景提取算法都是基于模型密度评估,然后在像素级对图像进行前景与背景分类的方法,它们具有相同的假设前提 – 各个像素之间是没有相关性的,跟它们算法思想不同的方法主要是基于马尔可夫随机场理论,认为每个像素跟周围的像素是有相关性关系,但是基于马尔可夫随机场的方法速度与执行效率都堪忧!所以OpenCV中没有实现。
OpenCV学堂
2019/05/22
5K0
OpenCV视频分析背景提取与前景提取
计算机视觉 | Python OpenCV 3 使用背景减除进行目标检测
背景减除(Background Subtraction)是许多基于计算机视觉的任务中的主要预处理步骤。如果我们有完整的静止的背景帧,那么我们可以通过帧差法来计算像素差从而获取到前景对象。但是在大多数情况下,我们可能没有这样的图像,所以我们需要从我们拥有的任何图像中提取背景。当运动物体有阴影时,由于阴影也在移动,情况会变的变得更加复杂。为此引入了背景减除算法,通过这一方法我们能够从视频中分离出运动的物体前景,从而达到目标检测的目的。 OpenCV已经实现了几种非常容易使用的算法。 环境 Python 3.6
用户1332428
2018/03/09
3.9K0
计算机视觉 | Python OpenCV 3 使用背景减除进行目标检测
图像处理——目标检测与前背景分离
本文介绍了图像处理中的目标检测和前景背景分离,重点介绍了基于深度学习的方法。具体包括像素点操作、低秩矩阵应用和深度学习中的注意力模型等。
码科智能
2018/01/03
5.5K0
图像处理——目标检测与前背景分离
背景提取算法——帧间差分法、背景差分法、ViBe算法、ViBe+算法
本文介绍了ViBe算法的原理、实现过程,并分析了其在运动目标检测和跟踪领域的应用。同时,文章还探讨了ViBe算法的改进算法ViBe+,并介绍了其在运动目标检测领域的应用。
剑影啸清寒
2018/01/02
10K0
背景提取算法——帧间差分法、背景差分法、ViBe算法、ViBe+算法
使用OpenCV进行检测、跟踪移动物体
本文关键词:OpenCV、Python、背景减除器、KNN、MOG2、目标检测与追踪
小白学视觉
2024/09/25
1830
使用OpenCV进行检测、跟踪移动物体
OpenCV系列学习之(六)
把A的转置与A相乘再取逆,把这个矩阵对角化为特征值x1,x2,当两个特征值都很大时,矩阵才可逆,即为角点时矩阵才可逆。图片中80%以上的像素点都是不可逆的,只有角点才可逆。所以在做光流估计时,输入要是角点。
墨明棋妙27
2022/08/24
3690
OpenCV系列学习之(六)
技术解码 | WebRTC音视频延时、同步分析以及超低延时优化
导语 | 在实时音视频中,我们关注的最主要的指标是低延时、高质量和高流畅,那么这篇文章就从延时和流畅方面来介绍一下WebRTC框架中的低延时、流畅以及对于它们的优化。 - 延时 - 由于音频和视频包大小的不同,在WebRTC中,音频和视频的jitterbuffer也就有各自的实现。其中音频延时为playout_delay_ms和jitter_delay(NetEq接收缓存延时)。视频延时则包含jitter_delay(jitterbuffer接收缓存延时),decode_delay和rend
腾讯云音视频
2021/10/12
5.2K1
驾驭白夜场景、刷新多个SOTA,苏黎世联邦理工用高效时序建模提升多目标追踪与分割
本文是对苏黎世联邦理工、中国香港科技大学和快手科技的论文《Prototypical Cross-Attention Networks for Multiple Object Tracking and Segmentation- PCAN》的解读,该论文被 NeurIPS 2021 接收为 spotlight。
机器之心
2021/12/28
5220
驾驭白夜场景、刷新多个SOTA,苏黎世联邦理工用高效时序建模提升多目标追踪与分割
河北挺住!计算机视觉"为"雨绸缪(附溺水检测论文)
据最新消息,受暴雨影响,河北地铁全线网车站停运,纯电公交停运,机场取消、延误航班超200架次,途径的多个高速路段全线禁止所有车辆上站。在人工智能时代,我们需要通过AI来检测洪水或泳池内溺水的人,及时做到拯救工作。
计算机视觉研究院
2023/08/24
2360
河北挺住!计算机视觉"为"雨绸缪(附溺水检测论文)
使用 Python 和可视化编程控制树莓派机械臂myCobot
myCobot 280 Pi 是一款 6 自由度多功能桌面机械臂。它由大象机器人研发,使用 Raspberry Pi 作为主控制器。该机器人结构紧凑,运行稳定,非常适合新手入门。它还可以使用多种语言进行编程,简单易用,功能丰富。适合那些有兴趣学习如何对机械臂进行编程控制和项目开发的人。
大象机器人
2022/11/30
4.9K0
使用opencv实现实例分割,一学就会|附源码
无论是从酒店房间接听电话、在办公里楼工作,还是根本不想在家庭办公室等情况,电话会议模糊功能都可以让会议与会者专注于自己,这样的功能对于在家工作并希望保护其家庭成员隐私的人特别有用。 为了实现这样的功能,微软利用计算机视觉、深度学习以及实例分割技术实现。 在之前的博文中,介绍了如何利用YOLO以及OpenCV实现目标检测的功能,今天将采用Mask R-CNN来构建视频模糊功能。
用户3578099
2019/08/15
2.3K0
【深度学习】目标检测
目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。
杨丝儿
2022/03/01
2.8K0
【深度学习】目标检测
HiFi4G: 通过紧凑高斯进行高保真人体性能渲染
HiFi4G 架构如图 1 所示,(a) 首先使用非刚性跟踪建立了一个粗变形图,并跟踪运动进行高斯优化。(b) HiFi4G 使用 NeuS2 初始化第一帧高斯,并构建细粒度高斯图以增强时间一致性。然后,我们利用 ED 图来扭曲 4D 高斯,对高斯图应用
用户1324186
2024/01/24
5020
HiFi4G: 通过紧凑高斯进行高保真人体性能渲染
视频目标检测与图像目标检测的区别
前言 本文介绍了知乎上关于视频目标检测与图像目标检测的区别的几位大佬的回答。主要内容包括有视频目标检测与图像目标检测的区别、视频目标检测的研究进展、研究思路和方法。
AI算法与图像处理
2021/10/27
2.6K0
OpenCV图像处理专栏十九 | 手动实现基于Canny算子的边缘检测
接着昨天手动构造Sobel算子实现检测,今天来讲讲如何手动实现Canny边缘检测。由于要实现这个算法的需要的先验知识比较多,所以在学习这个算法的实现之前我们先来学习一下用于图像二值化的OSTU大津法。
BBuf
2020/03/19
1.4K0
恶劣天气下的目标检测
1、Object Detection in Fog Degraded Images
狼啸风云
2021/05/19
3.5K0
写写高斯模糊——从 CSS 模糊滤镜的白边说起
这也是一种很好的艺术效果,苹果惯用的毛玻璃效果本质便是高斯模糊,而我们将图片模糊后作为网站背景,既减小了图片的体积,也能别有一番风味。(譬如咱站点的背景也是高斯模糊后的产物。)
云游君
2021/05/21
3.7K0
推荐阅读
相关推荐
运动目标检测|混合高斯背景建模(含源码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文