深度传感器与深度估计算法
深度传感器概念
获得空间中目标位置或距离的传感器,按接收的媒介波来源可分为主动式和被动式两大范畴,主动式包括激光雷达、雷达、超声波传感器等,被动式主要为单目、多目相机等,同时两大类可组合为混合类型传感器,深度(即距离)测量机制可分为基于(被动)视差原理的机制和(主动)ToF(Time Of Flight)机制两种,使用结构光的RGBD相机,尽管其媒介波源于自身,但其工作原理实为双目视差。市面上已有面向室内应用的RGBD相机、面向自动驾驶应用的激光雷达+相机融合一体的传感器,其既有"被动测量深度"的单目或多目相机,又有"主动"测量深度的器件。由于环境信息规律的统一、不同种的媒介波的属性的统一,各式各样传感器的模型可再抽象为统一的深度传感器模型,进一步便引出了深度估计问题。
深度估计问题最早起源于双目立体视觉,后面扩展到多视图立体视觉并得到了详尽的研究可供借鉴,现在我们推广到一般的深度估计问题。
问题
自动驾驶应用为估计空间状态而使用多种具体的传感器,数据的具体处理方式不同,而此类硬件可被统一抽象为深度传感器,软件估计算法是否可以据此完成统一抽象?
首先总结问题的一般形式:已知传感器数据参考帧的位姿参数,帧上一个兴趣点的深度值和深度值方差的先验,提供帧序列和其位姿数据,通过一定方法获取相应同名点,估计该点的深度及其方差。此处深度指参考帧的坐标原点到空间点的距离。此问题需要设定深度分布的概率模型,然后给出一些参考思路。
深度传感器的概率模型
常用的概率模型有两种,第一种是高斯分布模型,较简单而易求解;第二种是高斯分布加均匀分布的混合分布,对现实传感器的属性描述更真实。高斯分布一般作为理想环境与传感器理想工作条件下传感器测量输出的分布,均匀分布则是对传感器运行异常或环境异常如遮挡问题等条件下假设的测量分布,两种分布的结合更能逼近描述真实世界。
深度求解的具体方法因特定传感器而异,下面首先以多视图图像估计深度为例给出具体估计方法,然后重点关注第二种概率模型的一般估计问题。
高斯分布模型的求解
深度期望估计
法I Triangulation求空间点坐标得出深度
x i x_{i} xi为图像点齐次坐标, P i P_i Pi为投影矩阵, X X X为空间点齐次坐标,投影方程如下,
x i = P i X x_i=P_iX xi=PiX
已知2帧以上的投影矩阵 P i P_i Pi和同名点,i=1,2......,求同名点的空间点估计X。
设 P j T P^{jT} PjT是 P i P_i Pi的第j行,则有
y p 3 T X − p 2 T X = 0 yp^{3T}X-p^{2T}X=0 yp3TX−p2TX=0
x p 3 T X − p 1 T X = 0 xp^{3T}X-p^{1T}X=0 xp3TX−p1TX=0
x p 2 T X − y p 1 T X = 0 xp^{2T}X-yp^{1T}X=0 xp2TX−yp1TX=0
第三行与前两行线性相关,利用多帧构造方程,
A X = 0 AX=0 AX=0
A的第i块为,
A i = [ y p 3 T − p 2 T x p 3 T − p 1 T ] A_i=\begin{bmatrix} yp^{3T}-p^{2T}\\xp^{3T}-p^{1T} \end{bmatrix} \quad Ai=[yp3T−p2Txp3T−p1T]
采用SVD求之。帧间运动不明显时易出现数值结果不稳定问题,实际测试中发现空间点坐标z经常为负数(以参考帧相机坐标系为参考坐标系,z应为正值),工程实现不考虑采用此法。
法II 射线法
设参考帧图像点对应一空间点的深度为 d r d_r dr,当前帧同一点的深度为 d c d_c dc, f r f_r fr, f c f_c fc分为参考帧、当前帧光心到空间点的射线单位矢量在相应帧坐标系下的表达,则有
d r f r = d c ( R r c f c ) + t r c d_rf_r=d_c(R_{rc}f_c)+t_{rc} drfr=dc(Rrcfc)+trc
令 f 2 = R r c f c f_2=R_{rc}f_c f2=Rrcfc, t = t r c t=t_{rc} t=trc,可构造如下方程,
f r T f r − f r T f 2 f 2 T f r − f 2 T f 2 \] \[ d r d c \] = \[ f r T t f 2 T t \] \\begin{bmatrix} f\^T_rf_r\&-f\^T_rf_2\\\\f\^T_2f_r\&-f\^T_2f_2 \\end{bmatrix} \\quad\\begin{bmatrix}d_r\\\\d_c\\end{bmatrix}\\quad=\\begin{bmatrix}f\^T_rt\\\\f\^T_2t\\end{bmatrix}\\quad \[frTfrf2Tfr−frTf2−f2Tf2\]\[drdc\]=\[frTtf2Tt
克莱默法则求解 d r d_r dr, d c d_c dc,获取参考帧下的光心到空间点下的矢量的两个表达式,
x m = d r f r x_m=d_rf_r xm=drfr
x n = d c f 2 + t x_n=d_cf_2+t xn=dcf2+t
取二者平均求结果模长即为新观测到的深度。
深度方差估计
考虑深度的不确定性,针对图像数据可考虑光度不确定性或几何不确定性,本文暂时只考虑几何关系造成的不确定性,假设角点观测误差为1个像素,以参考帧坐标系为参考系,设参考帧光心到当前帧光心的矢量为 t t t,参考帧光心到目标点的矢量为 p p p,当前帧光心到目标点的矢量为 a a a,
α = a r c c o s ( p ∗ t ∣ ∣ p ∣ ∣ ∗ ∣ ∣ t ∣ ∣ ) \alpha=arccos(\frac{p*t}{||p||*||t||}) α=arccos(∣∣p∣∣∗∣∣t∣∣p∗t)
β = a r c c o s ( a ∗ ( − t ) ∣ ∣ a ∣ ∣ ∗ ∣ ∣ t ∣ ∣ ) \beta=arccos(\frac{a*(-t)}{||a||*||t||}) β=arccos(∣∣a∣∣∗∣∣t∣∣a∗(−t))
β ′ = β + a r c t a n ( 1 / f ) \beta^\prime=\beta+arctan(1/f) β′=β+arctan(1/f)
γ = π − α − β ′ \gamma=\pi-\alpha-\beta^\prime γ=π−α−β′
∣ ∣ p ′ ∣ ∣ = ∣ ∣ t ∣ ∣ s i n β ′ s i n γ ||p^\prime||=||t||\frac{sin\beta^\prime}{sin\gamma} ∣∣p′∣∣=∣∣t∣∣sinγsinβ′
σ o b s = ∣ ∣ p ∣ ∣ − ∣ ∣ p ′ ∣ ∣ \sigma_{obs}=||p||-||p^\prime|| σobs=∣∣p∣∣−∣∣p′∣∣
σ o b s 2 = σ o b s ∗ σ o b s \sigma_{obs}^2=\sigma_{obs}*\sigma_{obs} σobs2=σobs∗σobs