从零开始的三维重建(五)——单视图测量

之前我们已经把有关三维重建最基础的相机标定的部分完整说完了,具体内容可以看之前的三章内容:从零开始的三维重建(二)—— 相机标定(上)从零开始的三维重建(三)—— 相机标定(下)从零开始的三维重建(四)——相机标定(补充)。接下来我们会开始进行最初的三维重建尝试,首先我们面对的就是单视图测量的问题。常理来说我们进行三维重建是需要多个视角的摄像机得到的图片的,但在一些特殊情况下,我们也可以通过单一视角完成对于图片的三维重建,这就需要我们用到有关无穷远的知识。

无穷远的点、线、面

我们先来考虑一下无穷远的定义,在二维平面下什么样的点我们会称之为无穷远点呢?
我们考虑三维空间中的一个点x= [ x 1 x 2 x 3 ] \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \end{bmatrix} x1x2x3 ,我们将它做归一化,对应得到二维空间中的点就是x= [ x 1 / x 3 x 2 / x 3 1 ] \begin{bmatrix} x_{1}/x_{3} \\ x_{2}/x_{3} \\ 1 \end{bmatrix} x1/x3x2/x31 ,我们可以看到如果我们想要前两个坐标值为正无穷,只需要让x 3 _{3} 3=0,因此二维空间中无穷远点的坐标对应到三维空间中就是x= [ x 1 x 2 0 ] \begin{bmatrix} x_{1} \\ x_{2} \\ 0 \end{bmatrix} x1x20 .
然后我们来看二维空间中的直线方程,首先对于一个直线方程ax 1 _{1} 1+bx 2 _{2} 2+c=0,我们可以把它写成如下形式:x T ^T Tl=0,其中l= [ a b c ] \begin{bmatrix} a \\ b \\ c \end{bmatrix} abc x= [ x 1 x 2 1 ] \begin{bmatrix} x_{1} \\ x_{2} \\ 1 \end{bmatrix} x1x21 。其中我们可以发现x可以代表直线上所有的点,又因为x T ^T Tl=0,所以l向量就是直线的法向量。
那么如果我们有两条直线l、l’,我们就可以计算得到两条直线的交点为x=l×l’,证明过程如下:
l × l ′ ⊥ l → ( l × l ′ ) ⋅ l = 0 → x ∈ l   l × l ′ ⊥ l ′ → ( l × l ′ ) ⋅ l ′ = 0 → x ∈ l ′ l×l'⊥l→(l×l')·l=0→x∈l\\ \\\ \\ l×l'⊥l'→(l×l')·l'=0→x∈l' l×ll(l×l)l=0xl l×ll(l×l)l=0xl
因为x既在l上又在l’上,所以x为交点。
那么假设我们有两条平行的直线,即l= [ a b c ] \begin{bmatrix} a \\ b \\ c \end{bmatrix} abc l’= [ a ′ b ′ c ′ ] \begin{bmatrix} a' \\ b' \\ c' \end{bmatrix} abc ,-a/b=-a’/b’,如果我们想求它们两个的交点,就可以用l×l’,根据矩阵叉乘的计算公式以及未知数之间的关系我们可以得到:
l × l ′ = [ b ( c ′ − a ′ c / a ) − a ( c ′ − a ′ c / a ) 0 ] ∝ [ b − a 0 ] l×l'=\begin{bmatrix} b(c'-a'c/a) \\ -a(c'-a'c/a) \\ 0 \end{bmatrix}\propto\begin{bmatrix} b \\ -a \\ 0 \end{bmatrix} l×l= b(cac/a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值