直接线性变换(DLT)算法
首先讨论由给定
到
的四组点对应
确定
的一种简单的线性算法。变换由方程
给出。但因为这是一个齐次矢量方程; 因此 3 维矢量
和
不相等。可以用矢量叉乘:
表示。
如果将矩阵
的第
行记为
,
,则
可以转换成:
是由矩阵
的元素组成的 9 维矢量:
- 是未知矢量 的线性方程.。矩阵 的元素是已知点的坐标的二次多项式。
- 虽然式中有三个方程,但仅有两个是线性独立的。在解 时常省去第三个等式。
- 该方程组对 的任何齐次坐标 成立。
求解
每组点对应给出关于 元素的两个独立的方程。给定四组这样的点对应,便获得方程组 。
超定解
如果给出的点对应 多于四组,方程组 是超定的。如果点的位置是精确的,那么 的秩仍然为 8 并有一维零空间,并且存在精确解 。如果图像坐标的测量是不精确的,方程组将不存在精确解。我们需要求一个适当的代价函数取最小值的矢量 。通常附加范数条件,既然不存在 的精确解,很自然会在通常约束 下最小化范数 。这等价于求商 的最小值问题。该解是 的最小特征值的(单位)特征矢量。由此所得到的算法称为基本 DLT 算法。
非齐次解
另 一种方法是把等式转成非齐次线性方程组,即给矢量
中的某个元素强加上
的条件。
其中 是由 的前 8 个元素组成的 8 维矢量。
但是,如果事实上真正的解是 ,那么不存在一个因子 使 .。这意味着令 得不到真解。
退化配置
出现某种配置不能确定唯一解的情形称为退化。注意退化的定义既涉及配置也涉及变换类型。而且退化问题不仅限于最小配置解。如果多出来的( 精确的,即无误差的)点对应也共线,那么退化问题仍没有解决。
由线和其他,实体求解
到目前为止以及本文的其余部分,都只讨论由点对应采计算单应。然而线对应和二次曲线的对应也可以来计算单应。于是就产生计算一个单应(或任何其他关系)需要多少组对应的问题。一般的原则是约束数必须等于或大于变换的自由度数。
但采用混合类型的对应来计算
时必须谨慎。例如一个
单应不能由两组点对应和两组线对应唯一确定,但能由三级点和一组线或一组点和三组线来唯一确定,即使每种配置都有 8 个自由度也是如此。