原标题:SVO 中的深度滤波的推导
原文来自:CSDN 原文链接:https://blog.csdn.net/zhiwei121/article/details/103030372
其中关于两个高斯分布的乘积,可以参考相关公式进行推导。
关于上图中公式(1)的近似,在下图
有关SVO 中的相关代码
void DepthFilter::updateSeed(const float x, const float tau2, Seed* seed)
{
// 合成正态分布的标准差
float norm_scale = sqrt(seed->sigma2 + tau2);
if(std::isnan(norm_scale))
return;
// 正态分布
boost::math::normal_distribution<float> nd(seed->mu, norm_scale);
// 1/(s^2) = 1/(sigma2)+ 1/(tau2)
float s2 = 1./(1./seed->sigma2 + 1./tau2);
// m = (s^2) * (mu/sigma2 + x/tau2)
float m = s2*(seed->mu/seed->sigma2 + x/tau2);
// C1 = a/(a+b) * N(x|mu,sigma2 + tau2) ,pdf()概率密度
float C1 = seed->a/(seed->a+seed->b) * boost::math::pdf(nd, x);
// C2 = b/(a+b) * U(x)
float C2 = seed->b/(seed->a+seed->b) * 1./seed->z_range;
// 概率密度的归一化, 即C1、C2的归一化
float normalization_constant = C1 + C2;
C1 /= normalization_constant;
C2 /= normalization_constant;
// 计算 f、e 来进行a、b的更新
// f = C1*(a+1)/(a+b+1) + C2*(a)/(a+b+1)
float f = C1*(seed->a+1.)/(seed->a+seed->b+1.) + C2*seed->a/(seed->a+seed->b+1.);
// e = C1*(a+1)*(a+2)/((a+b+1)*(a+b+2))+ C2*(a)*(a+1)/((a+b+1)*(a+b+2));
float e = C1*(seed->a+1.)*(seed->a+2.)/((seed->a+seed->b+1.)*(seed->a+seed->b+2.))
+ C2*seed->a*(seed->a+1.0f)/((seed->a+seed->b+1.0f)*(seed->a+seed->b+2.0f));
// update parameters 参数更新
// mu = C1*m+C2*mu;
float mu_new = C1*m+C2*seed->mu;
//sigma2 = C1*(s2 + m*m) + C2*(sigma2 + mu*mu) - mu_new*mu_new;
seed->sigma2 = C1*(s2 + m*m) + C2*(seed->sigma2 + seed->mu*seed->mu) - mu_new*mu_new;
seed->mu = mu_new;
// a 和 b 的更新
seed->a = (e-f)/(f-e/f);
seed->b = seed->a*(1.0f-f)/f;
}
参考以下博客:
https://www.cnblogs.com/luyb/p/5773691.html
https://blog.csdn.net/weixin_43793960/article/details/89359012
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com