提取我从基本矩阵中得到的平移向量的比例

Posted

技术标签:

【中文标题】提取我从基本矩阵中得到的平移向量的比例【英文标题】:Extracting the scale of translation vector that I got from the essential matrix 【发布时间】:2021-12-12 23:21:00 【问题描述】:

我想获取两个相机的外在参数,它们看着同一个视图。为此,我遵循了几本教科书、讲座等中规定的程序。

    使用 SIFT 计算两个图像中的匹配。 使用 OpenCV cv2.findEssentialMat 计算基本矩阵。 使用 cv2.recoverPose() 从四个解中恢复了正确的 R 和 t。

据我了解,翻译达到了一定规模。我该怎么做才能获得绝对翻译。我在场景中没有任何已知物体,也许我在场景中会有车道线,有没有办法使用车道线信息来获得绝对平移?

【问题讨论】:

【参考方案1】:

I found this post on dsp stackexchange 部分解决了您的问题。正如您所发现的,无法从基本矩阵中推断出平移的比例,您需要更多信息。这是有道理的,因为如果您的唯一信息是点对应关系,那么大小和形状就会不明确。

如何推断规模 如果您需要了解相机平移比例,则需要了解一些场景几何。也就是说,您可以将其用作确定翻译范围的参考,例如场景中校准对象的坐标。然后,您可以使用像Perspective-n-Point (PnP) 这样的姿势估计方法。 我在 PnP 上找到了 Willem Hof 的 this lecture,其中包括非常清晰简洁的代码截图。

请注意,在执行 PnP 时,您有多个未知数。您的第一台相机被假定为 [I|0],因此它的姿势完全未知。一旦第一个相机已知,第二个相机的位姿将是P1·rel P1,而第二个相机只剩下一个未知参数,它的平移比例。

为什么你不能推断翻译规模 例如,如果你有两个球的图像和许多点对应关系,用校准过的相机拍摄,位置和姿势都未知:那么它是一个普通的足球还是一座山大小的球雕塑?好吧,我们可以使用基本矩阵来获取两个相机的相对姿势,并对球的 3D 重建进行三角测量。但是我们会知道规模吗?当然我们现在知道球的形状,但是三角点之间的距离是多少?该信息不存在。您可以推断相机的相对旋转;一个在球的前面(将此相机表示为 [I | 0] ),另一个在球的侧面。您还知道相机朝哪个方向行进(平移),但不知道多远。对于大型对象,平移将具有更大的规模。同样,您确实通过基本矩阵分解知道两个相机的相对平移方向和相对旋转,这是一个有价值的约束。

【讨论】:

以上是关于提取我从基本矩阵中得到的平移向量的比例的主要内容,如果未能解决你的问题,请参考以下文章

闫令琪GAMES101笔记 变换

通过 SVD 从基本矩阵中提取翻译的正确方法

用矩阵来运算向量与点的平移

matlab对矩阵/向量的常用操作(拼接矩阵向量逆序改变矩阵形状求行阶梯形矩阵提取矩阵的一部分等)

matlab对矩阵/向量的常用操作(拼接矩阵向量逆序改变矩阵形状求行阶梯形矩阵提取矩阵的一部分等)

从 OpenCV 中的基本矩阵“recoverPose”后正确解释姿势(旋转和平移)