版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012348774/article/details/84065627
以下均为简单笔记,如有错误,请多多指教。
-
证明式
K=PkCkT(CkPkCkT+Qk)−1。
答:由于课本上已经推导了大部分的公式,则已知
P
k=(1−KCk)Pk
K=P
kCkTQk−1
故而得到
K=(1−KCk)PkCkTQk−1=PkCkTQk−1−KCkPkCkTQk−1;
稍微处理一下得到
K(1+CkPkCkTQk−1)=PkCkTQk−1
方程两边同时乘以
Qk,则
K(Qk+CkPkCkT)=PkCkT
故而
K=PkCkT(Qk+CkPkCkT)−1
-
对比g2o和Ceres的优化后目标函数的数值。指出为什么两者在Meshlab中效果一样但数值却不同。
答:个人感觉这个是自然而然的,即便是同一个程序在不同的运行时间其数值都可能不太一样。
-
对Ceres当中的部分点云进行Schur消元,看看结果会有什么区别。
答:Schur消元后,Ceres运行的时间会得到一定程度的提高。本文使用了http://grail.cs.washington.edu/projects/bal/final.html中961张影像的数据,完全不边缘化的运行时间为1812s,边缘化所有点的运行时间为1629s。但是总体感觉似乎时间变化不多,具体原因还不太清楚。
部分点云进行消元要修改的代码也非常简单,即在ch10/ceres_custombundle中的SetOrdering稍微修改一下即可,例如只消元
1/3:
for(int i=0; i<bal_problem->num_points(); i++)
{
if(i%3==0)
{
ordering->AddElementToGroup(bal_problem->mutable_point_for_observation(i),0);
}
else
{
ordering->AddElementToGroup(bal_problem->mutable_point_for_observation(i),1);
}
}
- 证明
S矩阵为半正定矩阵。
答:假设
H=[BETEC]
则
S=B−EC−1ET。
首先要说明一点的是前文已经说过
H是一个半正定矩阵,即存在
x使得
xHxT≥0。
又由于
H=[BETEC]=[I0−EC−1I][B−EC−1ET00I][I(−EC−1)T0I]
假设记为
H=PNPT
故
xHxT=xPNPTxT=(xP)N(xP)T≥0
不妨记
y=xP,故
yNyT≥0
如果按照
B、
C把
y分成两部分,则
y=[y1,y2]
故
yNyT=y1Sy1T+y2y2T≥0
不难发现
y1Sy1T≥0
故得证。