单高斯模型
定义
单高斯模型是一种图像处理背景提取的处理方法,适用于背景单一不变的场合。可以使用单高斯模型对背景进行建模,然后通过背景减除提取出运动目标。
数学定义
单高斯模型认为,对一个背景图像,特定像素点灰度值的分布满足高斯分布,即对背景图像B,每一个点(x,y)的亮度满足B ( x , y ) ~ N ( μ , σ 2 ) B(x,y)\text{\textasciitilde} N(\mu,{\sigma}^2)B (x ,y )~N (μ,σ2 ),即:
I ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 I(x)=\frac 1 {\sqrt{2\pi}\sigma}e^{-{\frac {(x-\mu)^2} {2\sigma^2}}}I (x )=2 πσ1 e −2 σ2 (x −μ)2
也就是说,每一个像素点都包含两个属性,均值μ \mu μ和方差σ \sigma σ。在提取目标的过程中,首先计算一段时间内的视频序列中图像每一个点的均值和方差,作为背景模型,然后对于一幅包含前景的任意图像G,对G上每一个点(x,y)计算,若:
1 2 π σ e − ( I G ( x , y ) − I B ( x , y ) ) 2 2 σ 2 > T \frac 1 {\sqrt{2\pi}\sigma}e^{-{\frac {(IG(x,y)-IB(x,y))^2} {2\sigma^2}}} > T 2 πσ1 e −2 σ2 (I G (x ,y )−I B (x ,y ))2 >T
则认为该点是背景点,否则是前景点,其中T为一个常数阈值,IG(x,y)表示图G中点(x,y)的灰度值,IB(x,y)同理。
随着时间的变化,背景图像也会发生变化,因此需要调整每个像素点的参数:
μ ( x , y , t ) = l r ∗ μ ( x , y , t − 1 ) + ( 1 − l r ) ∗ I ( x , y , t ) \mu(x,y,t)=lr\mu(x,y,t-1)+(1-lr)I(x,y,t)μ(x ,y ,t )=l r ∗μ(x ,y ,t −1 )+(1 −l r )∗I (x ,y ,t )
σ ( x , y , t ) = l r ∗ σ ( x , y , t − 1 ) + ( 1 − l r ) ∗ ( I ( x , y , t ) − μ ( x , y , t ) ) 2 \sigma(x,y,t)=lr\sigma(x,y,t-1)+(1-lr)(I(x,y,t)-\mu(x,y,t))^2 σ(x ,y ,t )=l r ∗σ(x ,y ,t −1 )+(1 −l r )∗(I (x ,y ,t )−μ(x ,y ,t ))2
其中lr是一个常数,表示更新率,lr越大,背景更新的越慢。
Python编码实现
import cv2
import numpy as np
"""
使用单高斯模型检测静止相机下的运动目标
"""
np.set_printoptions(precision=2,suppress=True)
T=3
lr=0.3
cap=cv2.VideoCapture('video.gif')
isFirst=True
while cap.isOpened():
ret,frame=cap.read()
if frame is not None:
gray=cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)
if isFirst:
mean=np.zeros(gray.shape)
var=np.zeros(gray.shape)
isFirst=False
else:
frame[(gray-mean)**2 > T*var,2]=255
cv2.imshow('tracking',frame)
mean=lr*mean+(1-lr)*gray
var=lr*var+(1-lr)*(gray-mean)**2
if cv2.waitKey(50) and 0xFF ==ord('q'):
break
else:
break
检测效果
静止相机:
; 非静止相机:
单高斯模型检测静止相机效果还行,非静止相机完全不能用
Original: https://blog.csdn.net/HuaBother/article/details/121939956
Author: WAChiZhou
Title: 单高斯模型检测运动目标
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/645323/
转载文章受原作者版权保护。转载请注明原作者出处!