介绍在已知刚体运动+尺度变换前后模型的对应点后,如何得到最优的刚体运动(和尺度变换)估计。
Pose
要谈论刚体运动或尺度变换,则必然是在讨论同一物体两个坐标系(frame)之间的运动/尺度关系。如果只是给出一个物体的单个三维模型,是没有办法定义其运动或位姿的。
因此,谈论物体位姿(pose)时,我们都必须先假想存在一个“正规的坐标系”(canonical frame),然后再以该物体当前坐标系到正规坐标系的刚体运动和尺度变换为其位姿或尺度。
正规坐标系可以是显式(以正规坐标系下的点云的形式)提供,也可以(通过提供此物品运动后的点云+刚体运动参数和尺度参数等)隐性地给出。
Umeyama Method
现在我们需要估计在两个坐标系中的同一物体之间的刚体运动和尺度变化。假设我们用两个点云分别表示两个坐标系中物体,已知这两个点云在同一公共坐标系中的坐标和两个点云之间点与点的对应关系(匹配)时,可以用梅山(Umeyama)方法估计刚体运动和尺度(进而可用于估计位姿)。
注意:没有点与点的对应关系时没法直接使用梅山方法。
设P′=[p1,...,pn]3×n,Q′=[q1,...,qn]3×n就是这两个点云,且pi与qi相匹配,则记由P到Q的旋转、位移和尺度放缩为R∈M3×3,t∈R3,s∈R。若点云数据完全精确,则有:∀i,sRpi+t=qi
注意:这里旋转、位移和尺度放缩的施加顺序对估计结果是有影响的。上式只是展示了一种施加方式。
若点云数据不精确时,即可通过解如下优化问题获得一个最优估计:
mins,R,tJ=∑i∣∣sRpi+t−qi∣∣22
s.t.RT=R−1
首先估计t。记pˉ=∑ipi/n,qˉ=∑iqi/n,则
J=∑i∣∣((qi−qˉ)−sR(pi−pˉ))+(qˉ−sRpˉ−t)∣∣22
=∑i∣∣(qi−qˉ)−sR(pi−pˉ)∣∣22+∣∣(qˉ−sRpˉ−t)∣∣22+2((qi−qˉ)−sR(pi−pˉ))T(qˉ−sRpˉ−t)
=∑i∣∣(qi−qˉ)−sR(pi−pˉ)∣∣22+∣∣(qˉ−sRpˉ−t)∣∣22
因此t的最优值就是qˉ−sRpˉ。
设P=[p1−pˉ,...,pn−pˉ]3×n,Q=[q1−qˉ,...,qn−qˉ]3×n,则优化问题可以写成
mins,RJ=∣∣Q−sRP∣∣F2
s.t.RT=R−1
这里的∣∣⋅∣∣F指Frobenius范数,即把矩阵所有元素平方求和再开方。因此这里的损失函数和前面是一样的。其严格的数学形式为∣∣M∣∣F=tr(MTM)
于是有:
J=tr((Q−sRP)T(Q−sRP))
=tr(QTQ)−tr(sPTRTQ)−tr(sQTRP)+tr(s2PTRTRP)
=tr(QTQ)−2ns⋅tr(PTRTQ)+ns2⋅tr(PTP)
等价于最小化:
J′=−2s⋅tr(PTRTQ)+s2⋅tr(PTP)
当R取定时,最小化要求s=tr(PTP)tr(PTRTQ)(*)
将其代回J′有:
J′=−tr(PTP)tr(PTRTQ)2
因此等价于最大化J′′=tr(PTRTQ)=tr(RTQPT)
到此为止此问题与正交普鲁克问题(Orthogonal Procrustes Problem,即s恒为1的梅山问题)等价。此时的点云配准算法又称Kabsch算法。
对QPT进行SVD分解,则:
J′′=tr(RTUDVT)=tr(VTRTUD)
其中D为对角阵(由于都是三维点,因此QPT是方阵;注意奇异值都是非负的),V,U为正交阵。注意到VTRTU整体也是一个正交阵,因此每列的模是1;而D的作用只是给VTRTU每列对应乘一个非负的数。因此,想让J′′最大,应该把VTRTU各列的方向扭到对求迹最有贡献的地方,因此得到VTRTU=I。
于是R=UVT,s可以通过代回(*)式求出。
提示:到此为止梅山问题即告解决。但是需要注意三个问题:
- 用来做位姿估计的两个点云必须有点与点之间的匹配关系。如果没有这个信息则此算法无用武之处。
- 算法对点数n没有上限。但为了避免离群点对估计结果的影响,建议尝试RANSAC等更合适的方法。
- 但是点数太少也不正确。在点数少于3或点数为3且三点共线时,方程J=0是欠定的。