直接法中的在线灰度标定

参考论文:Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM

灰度标定对于直接法,比如DSO,LSD之类的系统虽然不是必须的环节,但是论文中显示灰度标定对于提升系统精度有一定的作用。

DSO的灰度标定数据需要提前准备,比如下面这些标定文件,相机曝光时间,光晕底片,相机光度响应函数等。

有些时候并没有这些文件(某些数据集,或者实时数据流等),所以要想同样实现灰度标定需要在线生成标定需要的参数。

这里主要采用的方式是非线性优化(nonlinear optimize)。优化的具体形式下面会具体谈到,首先我们要对相机接收光照生成像素灰度这一过程建模。

这里有几个光学定义:

radiance L:物体表面单位面积上的能量分布,the amount of light reflected

irradiance I(x)物体表面单位面积总的入射能量,和方向无关。比如,用来描述传感器像元的入射光强(来自于不同方向的环境光的累加),the total amount of energy received at sensor location x

L和I之间的关系是:

I(x)=V(x)L

其中V是渐晕参数(vignetting factor),产生原因见下(摘自wiki)。这也是上面文件中vignette.png的作用。V:Ω->[0,1]

“光学晕影是由一个或多个透镜的实际尺寸造成的,后方的元件遮蔽了前方的,导致前端透镜离轴的有效入射光减少,结果是光的强度由图像中心向周围逐渐减弱。光学晕影对镜头的开口相当敏感,只要适当的调整光圈就可以消除,通常缩小2至3格就可以完全消除。”


这里的V通常构建为6阶多项式的形式,这里有3个未知参数,v=(v1,v2,v3):

 

I(x)代表了光由物体反射经过相机透镜后的强度。由于相机每一帧的曝光时间不同,所以还有在乘以一个系数e(exposure time)

Iacc(x)=eI(x)

最后相机的感光元件将光的强度通过函数映射为像素灰度。这个函数通常称为camera response function(CRF),CRF我们通常采用经验响应函数(EMoR),这里的n通常取4,也就是说这里有4个未知参数c=(c1,c2,c3,c4)。

O=f(eV(x)L)

有了这个等式我们就可以构建优化过程中的代价函数了:

 

 

可以看到这里有4个参数需要优化,分别是CRF中的c,渐晕参数v,曝光时间e,其中cv都是向量,还有L表示3D点p的radiance。

优化的大致流程是通过使用KLT找到不同帧间对应的像素点构建代价函数,首先固定L,优化c,v,e。构建雅阁比,使用LM-optimization:

 

 

 

 这一轮优化完后,固定c,v,e,优化L。 

以上两轮优化轮番进行,直至收敛。

以上的方法时间代价过高,所以论文提出了一点改动来适应在线标定的时间帧率。

首先将c,v和e,L解耦合:

 

每到新的一帧,先固定c,v的值,同时初始化L为跟踪点的均值,只优化e。因为这样做很快,所以可以实时估计每一帧的e。优化后台得到多帧后再优化c,v。并把c,v的值存起来供优化e使用。整个系统流程如下:

 

疑问:

L在线标定的时候不优化了吗?

 

 

 

 

posted @ 2020-07-10 10:23  Gabriel_hu  阅读(494)  评论(0编辑  收藏  举报