使用几何和线性代数从单个图像进行 3D 重建
萨蒂亚
一、说明
二、介绍
图1
以上这3张图片有什么共同点?如果你的猜测是平行线,那么你是对的。这种几何属性是艺术家用来在其艺术中呈现 3D 视图的主要工具。此属性也是从单眼摄像头或单个图像构建 3D 视图的主要支柱。让我们在本文中讨论这个问题。
我通过将图 3 中存在的第 3 张图像作为输入来重建 1D 场景。此实现存在一些缩放和指标校正问题。我会在某个时候解决这个问题。
图2–从单个图像进行3D重建
请观看视频。
这里的主要思想是如何利用几何和线性代数从单眼相机或单个图像重建 3D 视图。
三、概述
从单个图像进行3D重建主要取决于您如何使用几何结构从单个图像或单眼相机获得K和R值。
相机校准(K)值主要负责将2D点从图像平面反向投影到3D空间,旋转(R)值捕获所有结构之间的旋转。
图3
单图像或单眼相机的3D重建过程通常涉及2步过程
- 找到 K 和 R
1.1。使用前向投影。
1.2. 使用几何结构。 - 背投
这涉及将 2D 图像点投影到 3D 空间。
四、线性代数
让我们讨论一些关于线性代数的基础知识以及如何使用它们。我想到的基本问题是为什么需要线性代数?简短的回答是:
几何结构根据一些线性方程给出了场景中存在的不同点/线/圆锥之间的关系,这就是为什么需要线性代数来求解方程并找到未知数的原因。
以下是线性代数的概述。请参考。
当您设计线性方程组时,它属于以下类别之一:
- 方形系统(m = n)
- 矩形系统 (m !=n)- 在确定系统(n > m)- 在确定系统(m > n)
当您使用直接线性变换(DLT)时,非常需要上述理解。
我认为有了上述理解,我们可以进入下一阶段。
五. 找到 K 和 R :
5.1. 使用前向投影
图5
在前向投影中,已知的 3D 点(假设 X)首先将其转换为相机坐标系,然后转换为图像坐标系,从而投影到图像平面(假设 x)上。整个过程表示为:
x = PX — -等式(1)
其中 P 是 4x3 投影矩阵。P可以分解为KR[I | -C],其中K=相机校准,R=旋转,C=相机中心。
如果已知 3D 点和 2D 点,则只需要从方程 (1) 中找到 P。所以我们需要了解P的自由度。
P 具有 11 个自由度(不包括比例因子)。
K = 5,R = 3, C= 3
图6
如果 P 有 11 个自由度,这意味着它需要 5 个零 1/2 个点来求解线性方程。这是不可能的,所以我们需要拿6分。
图7
根据上述计算,n = 11 和 m=12。因此,据说该系统是过度确定的,可以有多个解决方案并且需要近似。参见图4。
如何使用直接线性变换(DLT)获得K和R:
DLT基本上形成了方程PX=0的线性系统,并从中找到K和R。它被归类为
- 基本 DLT。
- 标准化的 DLT。
此版本与相机中心的原点不变。因此,它是比基本DLT更受欢迎的一种。 - 具有成本函数的DLT。
在超定解的情况下,线性系统可以有许多解。因此,我们需要用一些成本函数(例如代数成本)近似解。
在这里,我们只讨论基本的DLT。
图8
请检查 GitHub - satya15july/2d_3d_corespondence 的实现。
5.2. 使用几何结构:
以下是针孔相机型号中使用的不同几何形状的简短摘要
图10
上述所有几何形状均用于针孔相机模型,用于3D图像重建。
图11
这是射影几何、仿射几何和欧几里得几何之间关系的简化视图。
图12
如何从单视图几何中获取 K 和 R
首先,您需要了解仿射几何、射影几何和欧几里得几何中存在的一些属性。
- 角度属性不保留在射影几何或仿射几何中,但它保留在欧几里得几何中。
- 圆锥和圆在欧几里得几何中可以唯一标识,但射影几何只能识别点,线和圆锥(圆作为圆锥)。
- 如果要在射影几何中找到射线或平面或直线之间的角度,则必须识别圆锥或绝对圆锥(IAC)的图像。原因是
- 圆锥由欧几里得几何和射影几何确定。
- 消失线在 2 个圆形点处与锥相交。
以下是从 IAC 获得 K 和 R 的方法
图.13
由上图可知,求K和R的第一步是
- 找到欧米茄(w)。
- 然后,找到 K 和 R。
如何从 3 个正交消失对中获取 Omega:
如果存在 3 个正交消失点,就可以轻松找到 Omega。请检查下图。
图.14
任何直线都可以与圆锥体/日食相交于 1 或 2 个点。因此消失线最多与圆锥体相交于 2 个点。
这里详细解释了锥体到欧米伽方程是如何推导的。
图15
如果我们可以施加一些额外的约束,例如,
- 如果使用方形像素,则 w1==w3 。
- 如果没有使用比例因子,则 w2=0
然后欧米茄基质变成
请检查 GitHub - satya15july/find_K_from_orthogonal_planes 的实现。
从几何结构中找到欧米茄后,您可以轻松地从中获得K和R。请参考图 13。
六、 背投
图16
让我们在其他文章中讨论这个问题,因为我不想让这篇文章变得大。
七、结论
校准相机意味着K是已知的,我们需要知道R,因为我们需要了解场景中存在的2个结构之间所需的旋转。在这里,我们了解如何使用不同的方法从单个图像中找到它们。
现在的问题是,在了解了这种技术之后,我们如何从单个图像或单眼相机重建3D场景。
检查下面的图像或任何随机的街景,我们如何通过使用上述技术重建它?我们可能需要哪些其他技术。这是一个有趣的问题。解决方案在某个时候再见。
让我们在这里暂停一下,我希望这篇文章能让您清楚地了解 3D 重建的工作原理。感谢您的阅读。
具体的实现在
- GitHub - satya15july/2d_3d_corespondence。
- GitHub - satya15july/find_K_from_orthogonal_planes。
- GitHub - satya15july/find_K_from_non_othogonal_planes。
- GitHub - satya15july/3dreconstruction_single_image。
如果您喜欢这些内容,欢迎拍手,并关注我以获取有关计算机视觉,3D重建和深度学习的更多信息内容。
引用
- 计算机视觉中的多视图几何,作者:Richard Hartley 和 Andrew Zisserman。