Feature Detection之How to Use Background Subtraction Methods
一.背景减除(Background Segment)
参考博客:
https://blog.csdn.net/Anderson_Y/article/details/82082095
此博客给出了多种背景减除的方法,包括了下面opencv中提到的几种方法
#include <opencv2/video/background_segm.hpp>//需要包含的头文件
Inheritance diagram for cv::BackgroundSubtractor:
下面转载部分对 BackgroundSubtractorMOG的解释
参考
论文:An Improved Adaptive Background Mixture Model for Realtime Tracking with Shadow Detection 2001
MOG算法简介
MOG算法是一种基于混合高斯背景建模的背景减除算法。算法对每个像素点使用固定数量的高斯函数(Gaussian component)来对其像素值的分布进行建模。通过训练得到每个高斯函数的 (ωi,μi,Σi)(ωi,μi,Σi) 参数。当新的一帧来到时,对场景中的每一个像素计算在 NN 时刻像素值为 \boldxN\boldxN 的概率:
p(xN)=∑j=1Kωjη(xN;θj)>(11)
(11)>p(xN)=∑j=1Kωjη(xN;θj)>
其中 η(xN;θj)η(xN;θj) 为标准正态分布函数:
η(xN;θj)=η(xN;μj,Σj)>=>e−12(x−μj)TΣ−1j(x−μj)>(2π)D2|Σk|12>(12)
(12)>η(xN;θj)=η(xN;μj,Σj)>=>e−12(x−μj)TΣj−1(x−μj)>(2π)D2|Σk|12>
其中 μjμj 和 Σj=σ2jIΣj=σj2I 分别为该高斯函数的均值和方差。对所有 KK 个高斯函数按照 ωj/σjωj/σj 从小到大排序,前B个高斯函数用来对背景进行建模。B按照如下方程选择:
B=argminb(∑j=1bωj>T)>(13)
(13)>B=argminb(∑j=1bωj>T)>
其中 TT 为一个常数,用于表示场景中背景的最小先验概率(it is the minimum prior probability that the background is in the scene)。对背景建模完成后,对场景中的每一个像素点,如果它与B个高斯函数中的任意一个的距离在 2.5 个标准差以上,则该像素点被认为是前景点(Background subtraction is performed by marking a foreground pixel any pixel that is more than 2.5 standard deviations away from any of the B distributions)。即:
p={>foreground >background if {∃ (|η(xN;θj)−μj|>2.5σj)|j∈[1,B]}others>>(14)
(14)>p={>foreground if {∃ (|η(xN;θj)−μj|>2.5σj)|j∈[1,B]}>background others>>
对于第一个匹配上的高斯函数(即与中心的距离在2.5个标准差以内),采用如下公式对其进行更新:
wN+1k>μN+1k>ΣN+1k>ρ>p(wk|xN+1)=(1−α)wNk+αp(wk|xN+1)=(1−α)μNk+ρxN+1=(1−α)ΣNk+ρ(xN+1−μN+1k)(xN+1−μN+1k)T=αη(xN+1;μNk,ΣNk)=>{> 1 if wk is the first match Gaussian component> 0 others>>>(15)
(15)>>wkN+1=(1−α)wkN+αp(wk|xN+1)>μkN+1=(1−α)μkN+ρxN+1>ΣkN+1=(1−α)ΣkN+ρ(xN+1−μkN+1)(xN+1−μkN+1)T>ρ=αη(xN+1;μkN,ΣkN)>p(wk|xN+1)=>{> 1 if wk is the first match Gaussian component> 0 others>>>
如果K个高斯函数都没有匹配上,那么用一个新的高斯函数去替代值最小的那个高斯函数。新高斯函数的均值为当前像素点的均值,方差为一个事先指定的较大值,权重为一个较小的值。
MOG2算法与 MOG 算法基本相同,不同之处在 MOG2 采用可变数量的高斯函数(Gaussian component),添加了阴影识别,效率更高,下面给出一篇相关博客: