【实验室:DLT】DLT算法的易错之处

来源:互联网 发布:摇头岭车神淘宝店 编辑:程序博客网 时间:2024/06/05 21:15

DLT算法的基本说明如下:

DLT+牛顿法

基本思路:

通过DLT法求出初值,再用牛顿法迭代求解。

 

DLT法的思路:

摄像机矩阵P是3*4的矩阵,共12个参数。如果不考虑12个参数之间的关系,认为它们是相互独立的,那么

sPX = x

就是一个线性方程(需对X和x进行归一化,使得点坐标中心在原点且到原点的距离是sqrt(2))。其中s是尺度因子。将该方程消去s可以得到形如

Ap = 0

形式的线性方程,其中p是12*1的矩阵,包含了P的12个参数。该方程的解可以通过SVD分解得到。由于内参已知,用内参矩阵左除P可以得到Rt的初值Rt0。

    Rt0一般是不满足正交条件的,需要将其转为正交矩阵。方法是将Rt0进行SVD分解,得到、

Rt0 = UWV'

    由于Rt0是方阵,故U=V。W是3*3的对角阵,对角元素是Rt0的特征值。如果要满足Rt0的正交条件,需令W=I,I是3*3的单位阵(即将特征值强制变成1)。此时

Rt0 = UV'

    满足正交条件,同时满足行列式为1。

    此时的Rt0即为要求的初值。

 

牛顿法思路:

    对于如下形式的方程

                                                  (1)

矩阵形式的牛顿法有如下的形式:

                  (2)

                      (3)

其中是将带入(1)式中得到的误差列向量。重复以上过程,直至达到要求的精度。


======================================================================================


以上是DLT算法的基本思路,以下着重说一下黑体字部分:为什么要归一化?归一化的好处是什么?、

《计算机视觉中的多视图几何》这本书中有过论述,如果一幅图的坐标x被xx = T1*x,而另一幅图的坐标xx' = T2*x'代替,其中T1和T2都是3*3的矩阵,表示一个相似变换。当我们求单应矩阵x' = Hx时,变成了

 T2 * x' = H' * T1 * x

这里的H‘和H显然是不同的,如果某个计算单应的方法是相似变换不变的,二者关系应该是

H = (T2.inv()) * H' * T1

那么,在DLT算法的实际运算中,二者并不相等。因为DLT算法并不是相似变换不变的

为什么?

关键在于:我们求得的矩阵H在任何情况下都含有一个未确定的尺度因子,该尺度因子对不同的特征点都是不同的。为了能够得到H的值,我们必然对H的范数(或行列式的值)有所约束。通常情况下我们使用SVD分解的方法求解,而SVD分解得到的H隐含一个约束是

||H||=1.

即将H写成列向量形式时,其欧氏长度为1.而上面的约束在经过相似变换后变成了
||(T2.inv()) * H * T1||=1

这两个式子并不等价。第一个式子满足时,第二个式子不一定满足。确切的说,二者并不以任何简单的形式相关联。也就是说,本质上经过对特征点坐标的相似变换,我们改变了对H的约束。这样得到的结果一定是不等价的。

所以我们需要归一化。

而归一化与DLT搭配使用,可以得到两个好处:

1.提高精度

显而易见的,归一化确保了约束的正确,精度自然提高。

2.带来相似变换不变性

由于通过归一化,我们将坐标转换到了标准的坐标空间里,所以特征点的任意相似变换(即原图的相似变换)都不会对DLT的结果产生影响,使得DLT获得了实际上的相似变换不变性。


==========================================================


再重复一次归一化的流程:

首先通过平移使得特征点的中心在原点。

之后经过缩放,使得特征点到原点的距离均值是sqrt(2)。

0 0
原创粉丝点击