SfM两视图重建(所谓的三角化)的解释
好的,我用一个最生活化的比喻来解释两视图重建(三角化),保证你秒懂。
核心比喻:人眼的立体视觉
请你现在就做一个实验:
- 闭上左眼,只用右眼看面前的一个物体(比如水杯),伸出一根手指去指它。
- 闭上右眼,只用左眼看同一个物体,再伸手指去指它。
你会发现,左右眼单独看时,手指指的方向是不同的。
为什么?
因为你的两只眼睛有距离(约6-7厘米),所以从两个不同的位置看同一个物体,它的视线方向是不同的。
你的大脑非常厉害,它能自动根据:
- 左眼看到的“方向线”
- 右眼看到的“方向线”
- 两只眼睛的距离(这个它天生知道)
在心里把这两条线画出来,让它们相交,交点就是物体的真实位置!这个过程,就叫三角化。
把这个比喻对应到“两视图重建”
| 你的眼睛系统 | 计算机的两视图系统 |
|---|---|
| 左眼 | 第一张照片(相机1) |
| 右眼 | 第二张照片(相机2) |
| 两眼之间的距离和朝向 | 相机的相对位姿(通过计算得到) |
| 物体在左眼视网膜上的成像点 | 特征点在第一张图片上的像素坐标 |
| 物体在右眼视网膜上的成像点 | 同一个特征点在第二张图片上的像素坐标 |
| 大脑画的“视线” | 从相机光心出发,穿过像素点的“反向投影射线” |
| 大脑找到的“交点” | 计算机算出的“三维点坐标” |
核心思想一句话总结
三角化,就是从两个已知位置“看”同一个未知点,通过两条“视线”相交,来确定这个点的三维位置。
详细拆解步骤(结合比喻)
第1步:拍两张照片,找到同一个点
你拿着手机,在左边拍一张客厅的照片,然后走到右边再拍一张。你在两张照片里找到同一个电灯开关(这就是“特征匹配”)。
第2步:搞清楚你拍照时站的位置和姿势
这步是关键!计算机需要知道:
- 你拍第一张照片时站在哪里,手机朝哪个方向?(位姿1)
- 你拍第二张照片时站在哪里,手机朝哪个方向?(位姿2)
- 你是怎么从位置1走到位置2的?(旋转和平移)
这个过程叫运动恢复或对极几何估计。计算机通过照片中很多点的匹配关系,反推出你的运动。
第3步:画出“视线”
计算机现在知道:
- 从位置1看开关,视线穿过照片上开关的像素,射向远方(形成一条3D空间的射线1)。
- 从位置2看开关,视线穿过照片上开关的像素,射向远方(形成一条3D空间的射线2)。
在理想、无误差的世界里,这两条射线应该完美地相交于一点,这个点就是开关的真实3D位置。
第4步:现实中的“三角化”
现实中,由于照片像素有误差、相机位姿计算有误差,这两条射线几乎不可能完美相交。它们通常是两条在空间中相互错开的“异面直线”。
这时怎么办?
计算机的算法会找一个最佳妥协点:
找到一个三维点 (X),使得它到两条射线的距离之和最小(即重投影误差最小)。
重投影误差通俗解释:把算出来的3D点 (X),假装放回去,投影到两张照片上,看看投影后的像素位置,和当初我找到的真实像素位置差多远。差得越少,说明我算得越准。
第5步:得到三维坐标
解出这个最佳点 (X) 的 ((X, Y, Z)) 坐标。好了,现在这个“电灯开关”在三维空间中的位置就被确定了!
为什么叫“三角化”?
因为它基于三角形的几何原理。
- 三角形的两个顶点:两个相机的位置(已知或已求出)。
- 三角形的底边:两个相机之间的连线(基线)。
- 三角形的顶角:从两个相机看向同一个点的视线夹角。
- 待求的是:顶点(三维点)的位置。
知道了底边长度和两个底角,就能确定三角形的形状和顶点位置,这就是三角测量法,所以这个过程叫三角化。
类比总结:现实场景
想象一下野外探险时用地图定位:
- 你爬上一座A山,看到远处有一座神秘的塔,你在地图上从A山的位置,沿着看塔的方向画一条射线。
- 你又爬到B山,再次看到那座塔,从B山的位置再画一条射线。
- 两条射线在地图上的交点,就是塔的精确位置!
两视图重建就是计算机视觉版本的“双山定位法”。
技术难点与要点
- 数据必须正确:两张照片里找到的必须是“同一个点”。如果匹配错了(比如把门把手匹配成了灯),那就全错了。
- 相机位姿要准:如果算错了你从A山到B山的距离和方向,画出的射线方向就错了,交点也就错了。
- 视角不能太奇葩:
- 如果两张照片拍摄位置几乎没变(基线太短),两条射线几乎平行,交点会在很远的地方,一点点误差就会导致巨大偏差(这叫“视差太小”)。
- 如果拍摄角度大于90度,同一个点可能看起来完全不一样,很难匹配。
所以,拍照片时,最好在有重叠视野的前提下,相机移动得明显一些,这样重建出来的三维点才更准。

浙公网安备 33010602011771号