本文主要是介绍【计算机视觉】Lecture 20:八点法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
提醒
本质/基础矩阵
本质矩阵和基础矩阵都是 3x3 的矩阵,用于“编码”两个视图的对极几何。
动机:给定一张图像中的一个点,乘以本质/基础矩阵将告诉我们在第二个视图中沿着哪个极线搜索。
本质/基础矩阵总结
Longuet-Higgins方程
极线:
极点:
本质矩阵 vs 基础矩阵:
本质矩阵E在成像坐标上作用(内参校准相机)
基础矩阵F在像素坐标上作用(未内参校准相机)
从匹配点计算基础矩阵F
假设有 m 组匹配点
每组匹配点满足:
F是一个 3×3 的矩阵(9个元素)
建立具有9个未知数的齐次线性系统
计算F
多少个点?
与单应性变换不同,在单应性变换中每组匹配点贡献两个约束(线性方程组中的行);但是在估计本质/基础矩阵时,每组匹配点只贡献一个约束(行)。[因为Longuet-Higgins/极线约束是一个标量方程。]
因此至少需要八组匹配点
所以称为八点法
解齐次系统
假设我们需要求解以下方程的非平凡解
其中,有 m 个方程和 n 个未知数,m >= n-1,rank(A) = n-1
由于 x 的范数是任意的,我们将寻找范数 | | x | | = 1 的解
最小二乘法
我们希望 Ax 尽可能接近0,并且 | | x | | = 1
有约束的优化问题
定义以下的代价函数:
这个代价称为拉格朗日代价LAGRANGIAN cost,而 λ 称为拉格朗日乘数LAGRANGIAN multiplier
拉格朗日通过引入额外变量将约束条件纳入代价函数中。
对 x 和 λ 分别求导:
第一个方程是特征向量问题
第二个方程是原始约束
x 是矩阵ATA的特征向量,关联特征值λ 的,表示为eλ
我们希望得到最小特征值所关联的特征向量
我们可以通过矩阵 A 的SVD分解得到 ATA 的特征向量和特征值
奇异值分解(SVD)
任何 m×n 的矩阵 A 可以被转换为三个矩阵的乘积:
其中:
-
U 是 m x m 矩阵,其列向量是正交向量
-
V 是 n x n 矩阵,其列向量是正交向量
-
D 是 m x n 对角矩阵,其对角线元素被称为A的奇异值(singular values),并且是这样的:
SVD性质
U 的列向量是矩阵 AAT 的特征向量
V 的列向量是矩阵 ATA 的特征向量
矩阵 D 的对角线元素的平方是矩阵 AAT 和矩阵 ATA 的特征值
计算基础矩阵F:八点法
rank(A) = 8
找到与矩阵 ATA 中最小特征值相关联的特征向量
八点法
输入由 m 组对应点构成,m>=8
-
构造 m×9 的矩阵 A
-
求解 A 的SVD分解:
-
基础矩阵 F 的元素是矩阵 V 中与最小奇异值相对应的列向量的元素。
八点法
基础矩阵 F 必须是奇异的(请记住,它的秩rank为2,因为对它来说,有一个左右的零空间(即极点)是很重要的)。加入rank为2的约束:
-
求解矩阵 F 的SVD分解:
-
将矩阵 F 中最小的奇异值设为0,从而构造
-
重新计算矩阵 F :
数值细节
对应点的坐标范围大导致数值不稳定。
最好先将它们归一化,这样它们的平均值为0,方差为1,最后将 F 逆归一化:
哈特利预处理算法(Lecture 16)
实际例子
如何“矫正”图像,以便任何适用于简单立体视觉的扫描线(scan-line)立体视觉算法都可用于查找稠密匹配(也就是为每个像素都计算一个视差图像)
立体矫正
图像重投影
将图像平面重新投影到一个公共平面上,这个公共平面平行于两个相机光学中心之间的连线
注意,只有相机的焦点才是最重要的
一般思想
应用一个单应性变换,这个变换是一个虚拟旋转,以使图像平面与基线平行(极点将会去往无穷远处)
应用射影变换使得极线对应于水平扫描线
将极点 e 映射到(1, 0, 0)
尝试最小化图像畸变
注意:矫正的图像通常不是长方形的
图像矫正
假设外参 R&T 已知,则计算一个3D旋转,这个旋转使得共轭极线共线并平行于水平图像轴
记住:围绕相机焦点的旋转只是图像中的一个 2D 单应性变换!
注意:本书中的这种方法假定摄像机经过校准(我们可以从本质矩阵 E 中恢复 R,T)。 稍后,我们将看到使用基础矩阵 F 的更通用方法。
• 矫正涉及到两个旋转:
- 第一次旋转将极点发送到无穷远处
- 第二次旋转使极线平行
• 使用第一个矩阵 R1 旋转左右相机(由平移 T 构成)
• 使用 R 矩阵旋转右相机
• 调整两个相机参考坐标系中的尺度
建立旋转:
其中
其中 T 表示左图像中的极点,是一个单位向量。上节课中我们知道如何从矩阵 E 计算这个T。
矫正算法
•建立矩阵Rrect
•设置R1=Rrect,Rr=R Rrect
•对于每个左点pl=(x,y,f)T
–计算R1 pl=(x’,y’,z’)T
–计算p’1=f/z’(x’,y’,z’)T
•对右相机使用Rr重复上述步骤
例子
一个更好的方法
当极点在图像中时,传统方法不起作用(例如,相机向前平移)
总体思路:在极点周围进行极性矫正(polar rectification)。
论文:“Simple andefficient rectification methodsfor general motion”, MarcPollefeys, R.Koch, L.VanGool, ICCV99.
极性矫正(polar rectification)
极点周围的极重新参数化
仅需要(方向上的)对极几何
保留极线长度
选择Δθ,这样就不会压缩像素
适用于所有相对运动
保证最小图像大小
极性矫正(polar rectification):例子
例子
这篇关于【计算机视觉】Lecture 20:八点法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!