Kernel Density Estimation(KDE):核密度估计
年份 | 论文题目 | 作者 | 论文内容 |
---|---|---|---|
2000 | Non-parametric model for background subtraction | AM Elgammal,D. Harwood,L. S. Davis | 提出了一种非参数背景模型(使用了KDE算法),并使用颜色信息来抑制阴影,最后与典型的参数背景模型GMM算法进行了性能对比 |
2004 | Motion-based background subtraction using adaptive kernel density estimation | A. Mittal,N. Paragios | 自适应KDE |
给定一个样本集,估计该样本集的概率密度函数有两种方式:
1.参数估计方法
简单来讲,即假定样本集符合某一概率分布,然后根据样本集拟合该分布中的参数,例如:似然估计,混合高斯等,由于参数估计方法中需要加入主观的先验知识,往往很难拟合出与真实分布的模型;
2.非参数估计方法
和参数估计不同,非参数估计并不加入任何先验知识,而是根据数据本身的特点、性质来拟合分布,这样能比参数估计方法得出更好的模型。核密度估计就是非参数估计中的一种。
关于KDE算法的讲解:
b站KDE视频
https://www.cnblogs.com/bonelee/p/11050244.html
KDE2000:
- 算法思路: 对每个像素点选择N个样本用KDE构建立两种背景模型,短期模型与长期模型,运用两个模型分别进行运动检测,计算两者结果的交集(只保留两种模型都分类为前景的像素点),并额外保留短期模型中与交集的前景点相邻的前景点。两个模型的运动检测过程相同,分为两个阶段
第一阶段:运用KDE算法(核函数选择高斯曲线 N ( 0 , Σ ) N(0,\Sigma ) N(0,Σ))对每个像素选择N个样本建立概率密度函数 Pr ( x ) \Pr ({x}) Pr(x), Pr ( x t ) = 1 N ∑ i = 1 N ∏ j = 1 d 1 2 π σ j 2 e − 1 2 ( x t j − x i j ) 2 σ j 2 \Pr ({x_t}) = \frac{1}{N}\sum\limits_{i = 1}^N {\prod\limits_{j = 1}^d {\frac{1}{{\sqrt {2\pi \sigma _j^2} }}} {e^{ - \frac{1}{2}\frac{{{{({x_{{t_j}}} - {x_{{i_j}}})}^2}}}{{\sigma _j^2}}}}} Pr(xt)=N1i=1∑Nj=1∏d2πσj21e−21σj2(xtj−xij)2若当前像素值概率 Pr ( x t ) < t h \Pr ({x_t}) < th Pr(xt)<th,则认为是前景。
第二阶段:对第一阶段检测出的前景点进一步处理以降低误检率。
计算该点像素值属于邻域分布的最大概率 P N ( x t ) = max y ∈ N ( x ) Pr ( x t ∣ B y ) {P_N}({x_t}) = \mathop {\max }\limits_{y \in N(x)}^{} \Pr ({x_t}|{B_y}) PN(xt)=y∈N(x)maxPr(xt∣By)计算连通域移动概率(即该像素所属连通域是由附近背景移动过来的概率,该像素所属连通域的所有像素的 P N ( x ) {P_N}({x}) PN(x)相乘) P c = Π x ∈ c P N ( x ) {P_c} = \mathop \Pi \limits_{x \in c}^{} {{\mathop{\rm P}\nolimits} _N}(x) Pc=x∈cΠPN(x)若 ( P N ( x ) > t h 1 ) ({P_N}(x) > th1) (PN(x)>th1)与 ( P c ( x ) > t h 2 ) ({P_c}(x) > th2) (Pc(x)>th2)同时满足,则认为是背景。
(第一个条件表示该点像素值属于旁边的背景分布,第二个条件表示这整个物体都属于旁边的背景分布) - 核函数带宽 Σ \Sigma Σ 的选择: 计算N个样本绝对偏差 ∣ x i − x i + 1 ∣ |{x_i} - {x_{i + 1}}| ∣xi−xi+1∣的中位数m,则 σ = m 0.68 2 \sigma = \frac{m}{{0.68\sqrt 2 }} σ=0.682m, Σ = σ 2 \Sigma = {\sigma ^2} Σ=σ2,原文还提到可以使用线性插值来获得更准确的中位数。
- 模型初始化: 选择N个样本用KDE建立初始的短期模型和长期模型。
- 前景/背景分类: 第一阶段根据 Pr ( x t ) < t h \Pr ({x_t}) < th Pr(xt)<th分类为前景,第二阶段只处理第一阶段的所有被分类为前景的点,将符合 P N ( x ) > t h 1 {P_N}(x) > th1 PN(x)>th1与 P c ( x ) > t h 2 {P_c}(x) > th2 Pc(x)>th2条件的修改为背景点。短期模型和长期模型均用上述步骤进行分类,计算两模型分类结果的交集,并额外保留短期模型中与交集前景点相邻的前景点,将此作为最终分类结果。
- 模型更新: 使用先进先出策略来更新模型,删除旧样本,添加新样本,并重新计算KDE。模型包含短期模型和长期模型。
短期模型包含N个样本,逐帧采样,分类为背景则替换掉模型中最旧的样本。(像素点的分类以最终分类结果为准)
长期模型同样包含N个样本,每W/N帧采样一次,直接替换最旧的样本(无论分类是什么),W是自己定义的时间窗口。 - 消除阴影: 给出RGB,则对应的色度坐标/归一化坐标(chromaticity coordinates)
r
=
R
R
+
G
+
B
,
g
=
G
R
+
G
+
B
,
b
=
B
R
+
G
+
B
(
r
+
g
+
b
=
1
)
r = \frac{R}{{R + G + B}},g = \frac{G}{{R + G + B}},b = \frac{B}{{R + G + B}}(r+g+b=1)
r=R+G+BR,g=R+G+BG,b=R+G+BB(r+g+b=1)使用RGB空间建模无法消除阴影,rgb空间去除了亮度信息所以可以消除阴影,但这会导致如白色物体在灰背景下无法检测出来,所以加上亮度信息,s=R+G+B表示亮度,使用 rgb 建模并结合 s 可以消除阴影并保留亮度相差过大的物体。步骤如下:
A是某点表示背景的N个样本的集合, x i = < r i , g i , s i > {x_i} = < {r_i},{g_i},{s_i} > xi=<ri,gi,si>表示A中的某个样本, x t = < r t , g t , s t > {x_t} = < {r_t},{g_t},{s_t} > xt=<rt,gt,st>表示 t 时刻观测值,定义集合 B ⊆ A B \subseteq A B⊆A B = { x i ∣ x i ∈ A ∧ α ≤ s t s i ≤ β } B = \{ {x_i}|{x_i} \in A \wedge \alpha \le \frac{{{s_t}}}{{{s_i}}} \le \beta \} B={xi∣xi∈A∧α≤sist≤β}使用B集合中样本的 r g 进行KDE(同第一阶段),若概率 < th,则依然为前景,否则改为背景。(亮度与背景相差不大且 r g 分量与背景分布相似的判断为阴影) - 涉及参数: N,邻域的选取,th,th1,th2。原文中N=100,邻域选择为直径为5(像素)的圆,th=th1,th,th1,th2的值未告知。