传统CV算法——背景建模算法介绍

帧差法

由于场景中的目标在运动,目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算,不同帧对应的像素点相减,判断灰度差的绝对值,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。

  • 帧差法非常简单,但是会引入噪音和空洞问题
    在这里插入图片描述

混合高斯模型

在进行前景检测前,先对背景进行训练,对图像中每个背景采用一个混合高斯模型进行模拟,每个背景的混合高斯的个数可以自适应。然后在测试阶段,对新来的像素进行GMM匹配,如果该像素值能够匹配其中一个高斯,则认为是背景,否则认为是前景。由于整个过程GMM模型在不断更新学习中,所以对动态背景有一定的鲁棒性。最后通过对一个有树枝摇摆的动态背景进行前景检测,取得了较好的效果。
混合高斯模型(Gaussian Mixture Model, GMM)是一种统计模型,用于表示具有多个峰值的数据分布。它是由多个高斯分布(也称为正态分布)组合而成的,每个高斯分布被称为一个组分。GMM广泛应用于聚类、密度估计和模式识别等领域。

原理:

混合高斯模型的基本思想是通过多个高斯分布的线性组合来拟合数据的整体分布。模型中每个高斯分布负责描述数据中的一个群(cluster)。

每个高斯分布组分由三个参数定义:

  • 均值(Mean):描述该分布中心的位置。
  • 协方差(Covariance):描述分布的宽度及其方向。
  • 混合权重(Mixture Weight):每个高斯分布在模型中的占比,确保所有分布的混合权重之和为1。

学习方法:

GMM通常使用极大似然估计方法进行参数估计,最常用的算法是期望最大化(EM)算法。EM算法通过迭代两个步骤来求解:

  1. 期望步(E-step):根据当前参数估计,计算每个数据点属于各个高斯分布的概率(软聚类)。
  2. 最大化步(M-step):更新每个高斯分布的参数,使得似然函数最大化。

应用场景:

  1. 聚类分析:GMM可以进行软聚类,即允许数据点以一定的概率属于多个群。这一特性使得GMM在某些应用中比硬聚类方法(如K-means)更为适用。
  2. 图像分割:在图像处理中,可以使用GMM对像素点进行聚类,以实现图像的区域分割。
  3. 语音识别:在语音信号的特征空间中,使用GMM来模拟音频数据的统计特性。
  4. 异常检测:GMM能够估计数据的整体分布,因此可以用来识别那些不符合预期分布的异常点。

混合高斯模型以其灵活性和强大的表达能力,在多个领域内有着广泛的应用。

  • 算法假设 在视频中对于像素点的变化情况应当是符合高斯分布
    在这里插入图片描述
  • 背景的实际分布应当是多个高斯分布混合在一起,每个高斯模型也可以带有权重
    在这里插入图片描述
混合高斯模型学习方法
  • 1.首先初始化每个高斯模型矩阵参数。

  • 2.取视频中T帧数据图像用来训练高斯混合模型。来了第一个像素之后用它来当做第一个高斯分布。

  • 3.当后面来的像素值时,与前面已有的高斯的均值比较,如果该像素点的值与其模型均值差在3倍的方差内,则属于该分布,并对其进行参数更新。

  • 4.如果下一次来的像素不满足当前高斯分布,用它来创建一个新的高斯分布。

混合高斯模型背景建模测试方法

混合高斯模型在背景建模中主要应用于视频监控系统中用于动态背景的检测和分析。该技术通过分析视频帧中的每个像素点随时间变化的统计特性,使用多个高斯分布来表示各个像素点的颜色变化,从而区分出背景和前景(如移动的对象)。这使得系统能够有效地识别和追踪视频中的动态对象,如行人、车辆等,同时忽略由光照变化、树木摇动等因素引起的背景噪声。此方法对于提高视频监控的准确性和效率具有重要作用。

在测试阶段,对新来像素点的值与混合高斯模型中的每一个均值进行比较,如果其差值在2倍的方差之间的话,则认为是背景,否则认为是前景。将前景赋值为255,背景赋值为0。这样就形成了一副前景二值图。

在这里插入图片描述

import numpy as np
import cv2#经典的测试视频
cap = cv2.VideoCapture('test.avi')
#形态学操作需要使用
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
#创建混合高斯模型用于背景建模
fgbg = cv2.createBackgroundSubtractorMOG2()while(True):ret, frame = cap.read()fgmask = fgbg.apply(frame)#形态学开运算去噪点fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)#寻找视频中的轮廓im, contours, hierarchy = cv2.findContours(fgmask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for c in contours:#计算各轮廓的周长perimeter = cv2.arcLength(c,True)if perimeter > 188:#找到一个直矩形(不会旋转)x,y,w,h = cv2.boundingRect(c)#画出这个矩形cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)    cv2.imshow('frame',frame)cv2.imshow('fgmask', fgmask)k = cv2.waitKey(150) & 0xffif k == 27:breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
混合高斯模型是一种常用的背景建模算法,用于检测视频图像中的静态背景。下面是混合高斯模型检测背景的优点和缺点。

优点:

  1. 处理复杂的背景:混合高斯模型可以建模和适应不同复杂度的背景,包括有多个背景物体、光照变化等。
  2. 自适应性:可以根据图像序列的变化自动更新模型参数,适应背景的变化。
  3. 实时性:混合高斯模型能够处理实时视频流,并在短时间内进行背景差分操作。

缺点:

  1. 参数选择:选择合适的模型参数对于混合高斯模型非常重要,包括高斯分量数目和阈值等,不当的设置会导致误检测和漏检测问题。
  2. 高计算开销:混合高斯模型需要对每个像素计算多个高斯分量的权重,并进行背景更新和背景差分操作,计算开销较高。
  3. 漂移问题:在背景建模的过程中,如果前景对象停留时间过长,混合高斯模型可能会将其误判为背景,从而导致漂移问题。

总体来说,混合高斯模型是一种强大的背景建模算法,适用于多种场景。然而,该模型的参数设置和计算开销需要仔细考虑,同时对于处理停留时间较长的前景对象可能会出现漂移问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416460.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS开发实战( Beta5版)小程序场景性能优化开发指导

简介 小程序是一种轻量级的应用,它不需要下载、安装即可使用,用户可以通过扫描二维码或者搜索直接打开使用。小程序运行在特定的平台上,平台提供了小程序的运行环境(运行容器)和一些基础服务(小程序API&am…

Linux学习笔记5 值得一读,Linux(ubuntu)软件管理,搜索下载安装卸载全部搞定!(上)

本文记录Ubuntu操作系统的软件包管理。 一、背景 整个Linux系统就是大大小小的软件包构成的,在linux系统中,软件的管理非常重要,与其他操作系统不同,linux的软件包管理比较复杂,有时还需要处理软件包之间的冲突。本文…

【电池专题】软包电池封装工序

铝塑膜成型工序冲坑 铝塑膜成型工序,软包电芯可以根据客户的需求设计成不同的尺寸,当外形尺寸设计好后,就需要开具相应的模具,使铝塑膜成型。 成型工序也叫作冲坑,顾名思义,就是用成型模具在加热的情况下,在铝塑膜上冲出一个能够装卷芯的坑,具体的见下图。 …

使用VM创建centos7环境

目录 1、安装VMware Workstation1.1安装VMware Workstation pro 161.2激活VMware Workstation pro 16 2. 创建centos7虚拟机2.1 点击创建新的虚拟机2.2 配置iso镜像2.3开启虚拟机,安装centos7系统 3. 配置网络方法1:方法2:配置静态IP地址 4. …

js逆向--绕过debugger(一)

js逆向--绕过debugger 一、禁用断点二、一律不在此处暂停三、文件替换四、安装最新版火狐浏览器一、禁用断点 首先说明,以下所说的任意一种方法并不适用于所有情况,需要灵活使用。以网站(https://antispider8.scrape.center/page/1)为例,在开发者工具调试区点击停用断点按…

六、桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象与实现分离,使得两者可以独立变化。通过使用桥接模式,可以避免在多个维度上进行继承,降低代码的复杂度,从而提高系统的可扩展性。 组成…

STM32常用C语言知识总结

目录 一、引言 二、C 语言基础 1.数据类型 2.变量与常量 3.控制结构 4.数组与指针 5.字符串 6. extern变量声明 7.内存管理 三、STM32 中的 C 语言特性 1.位操作 2.寄存器操作 一、引言 STM32 作为一款广泛应用的微控制器,其开发离不开 C 语言的支持。C …

若依系统的学习

若依环境 介绍 ‌若依是一款快速开发平台(低代码),用于快速构建企业级后台管理系统,它提供了许多常用的功能模块和组件,包括权限管理、代码生成、工作流、消息中心等 官方地址: https://www.ruoyi.vip/ ‌基于Spring Boot和Spring Cloud‌…

vue axios发送post请求跨域解决

跨越解决有两种方案,后端解决,前端解决。后端解决参考Django跨域解决-CSDN博客 该方法之前试着可以的,但是复制到其他电脑上报错,所以改用前端解决 1、main.js做增加如下配置 import axios from axios Vue.prototype.$axios a…

入门数据结构JAVA DS——如何实现简易的单链表(用JAVA实现)

前言 链表(Linked List)是一种线性数据结构,它由一系列节点组成,每个节点包含两个部分:存储数据的部分和指向下一个节点的指针(或引用)。链表的结构使得它能够动态地增长和收缩,适合…

【c++】常量周边之const应用:常变量

【c】常量周边:常量概念及定义 承接上文,我们学习了常量的基础知识,在此基础上,本篇文章对于宏定义 #define 和常量 const进行深入学习。 目录 #define 预处理器 const:在常量方面应用 使用技巧 const与指针的结合 const 与 …

我的电脑/资源管理器里无法显示新硬盘?

前情提要 我新!买了一个京东京造的SATA3硬盘,一个绿联的SATA3转USB读取 现在我的电脑里只能显示我本地的C盘和D盘,不能显示这个接入的SATA盘。 系统环境:windows11 问题描述 在我的电脑里,只能看到我原本的C和D&…

民宿酒店预订系统V1.0.8

多门店民宿酒店预订管理系统,快速部署属于自己民宿酒店的预订小程序,包含预订、退房、WIFI连接、吐槽、周边信息等功能。提供全部无加密源代码,支持私有化部署。 V1.0.8修复房间预订状态无法筛选的问题 修复房间预订状态无法筛选的问题 修复…

QtAV在windows下编译

官方编译参考 一、源代码下载 git执行操作: git clone https://github.com/wang-bin/QtAV.git cd QtAV && git submodule update --init二、依赖文件下载(ffmpeg) ffmpeg下载 下载完成后,拷贝到QtAV源代码目录,修改根目录名为ff…

MATLAB 计算凹凸多边形的面积(85)

MATLAB 计算凹凸多边形的面积(84) 一、算法介绍二、算法实现1.代码一、算法介绍 计算凹凸多边形的面积,并输出计算结果,可视化 二、算法实现 1.代码 % 设置多边形的顶点坐标 % 这里以一个五边形为例 x = [1, 3, 4

Windows 环境nginx安装使用及目录结构详解

一、 Windows 环境nginx安装及基本使用 1、下载 nginx-1.27.1 最新的主线版本 安装 nginx/Windows,请下载1.27.1最新的主线版本, nginx 的主线分支包含所有已知的修复程序。 2、 解压缩 nginx-1.27.1 版本 nginx/Windows 作为标准控制台应用程序&#x…

uniapp__微信小程序如何对比时间组件框选中框之后的时间大小

1、时间组件框选择时间 2、做判断 if (new Date(selectedDate) < new Date(this.startDate)) {uni.showToast({title: 结束时间不能早于起始时间,icon: none,duration: 2000});return;}console.log(new Date(selectedDate),new Date(this.endDate)); 3、打印出来的时间对比…

#QT 笔记一

重点&#xff1a;面试考试大概率涉及&#xff0c;需要不借助任何资料掌握。掌握&#xff1a;面试考试可能涉及&#xff0c;需要不借助任何资料掌握。熟悉&#xff1a;面试考试可能涉及&#xff0c;可以稍微参考资料掌握。了解&#xff1a;面试考试小概率涉及&#xff0c;面试拔…

【STM32+HAL库】---- 通用定时器PWM输出实现呼吸灯

硬件开发板&#xff1a;STM32G0B1RET6 软件平台&#xff1a;cubemaxkeilVScode1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置定时器 找到LED所对应的引脚PA5&#xff0c;选择TIM2_CH1模式 在TIM2中&#xff0c;时钟源选择内部时钟Internal Clock&#xff0c;通道1选择PWM…

Docker中的容器内部无法使用vi命令怎么办?

不知道你是否遇到过,在修改容器内部的配置的时候,有时候会提示vi命令不可用。尝试去安装vi插件,好像也不是很容易,有什么办法可以帮助我们修改这个配置文件呢? 解决办法 这时候,我们就需要用到docker cp 命令了,它可以帮助我们把容器内部的文件复制到宿主机上,也可以将…