用于视觉跟踪和平面标记的分步相机姿势估计


21

我从事增强现实和视觉跟踪应用程序的相机姿态估计这一主题已有一段时间了,我认为尽管有很多关于此任务的详细信息,但仍然存在很多困惑和误解。

我认为接下来的问题值得详细的逐步解答。

  • 什么是相机内在特性?
  • 什么是相机外部性?
  • 如何从平面标记计算单应性?
  • 如果我有单应性,该如何获得相机姿势?

我对您要进行的重归一化处理感到困惑:1. H是使用某些过程(例如SVD)从数据中找到的单应性。2. inv(K)* H = A是您在此处使用的对象。然后,使q1 = a1 / norm(a1)和q2 = a2 / norm(a2)作为旋转矩阵的正交列,并使q3 = q1xq2 ...然后取t /(某物)来获得平移矢量。您如何将q1和q2除以可能不同的东西,以及如何选择将t除以什么呢?还是SVD过程和与inv(K)相乘的想法给出了一些接近但不完全正交/正交的旋转矩阵,因此
user2600616 2013年

但是如何获得3D点(X,Y,1)?
waschbaer

Answers:


19

重要的是要了解,这里唯一的问题是获取外部参数。相机内在特性可以离线测量,为此目的有很多应用。

什么是相机内在特性?

相机内部参数通常被称为相机校准矩阵,。我们可以写K

K=[αusu00αvv0001]

哪里

  • α v ü v ˚F α Ù = ķ ü ˚F α v = ķ v ˚F ķ ù ķ v ù vαu和 是和坐标方向上的比例因子,并且与相机的焦距成比例:和。和是和方向上每单位距离的像素数。αvuvfαu=kufαv=kvfkukvuv

  • c=[u0,v0]T被称为主要点,通常是图像中心的坐标。

  • ü vs是偏斜,如果和不垂直,则仅是非零。uv

当内部特性已知时,将对相机进行校准。这很容易做到,因此它不是计算机视觉的目标,而是离线的琐碎步骤。

什么是相机外部性?

摄像机外部或外部参数是一个矩阵,对应于从世界坐标系到摄像机坐标系的欧几里得变换。 代表旋转矩阵,代表平移。3 × 4 R 3 × 3 t[R|t]3×4R3×3t

计算机视觉应用程序专注于估计此矩阵。

[R|t]=[R11R12R13TxR21R22R23TyR31R32R33Tz]

如何从平面标记计算单应性?

同形异是同质的 ×矩阵,涉及3D平面及其图像投影。如果我们有一个平面则将点映射到该平面上的单应性和在投影下其对应的2D点为3×3Z=0HM=(X,Y,0)TmP=K[R|t]

m~=K[R1R2R3t][XY01]

=K[R1R2t][XY1]

H=K[R1R2t]

为了计算单应性,我们需要点对世界相机。如果有平面标记,则可以对其图像进行处理以提取特征,然后在场景中检测这些特征以获得匹配。

我们只需要4对就可以使用Direct Linear Transform计算单应性。

如果我有单应性,该如何获得相机姿势?

单应性和摄像机姿态包含相同的信息,并且很容易彼此传递。两者的最后一列是翻译向量。单应性的列和两个也是相机姿态矩阵的列和两个。它仅位于列,并且由于必须正交,因此可以将其计算为第一列和第二列的叉积:HK[R|t]H1H2R1R2R3[R|t]

R3=R1R2

由于冗余,有必要对除以例如矩阵的元素[3,4] 进行归一化。[R|t]


4
我认为说校准“容易而不是CV的目标”是一种误导。在通常情况下,我们还需要估计失真参数。除了自校准外,我建议使用平面校准(Zhang-相机校准的一种灵活的新技术),因为如果可以执行单独的校准程序,它会更加灵活。您还存在“如果我有单应性,如何获得相机姿势?”的小错误。因为您没有考虑到校准(H_ {calib} = K ^ -1H)。
buq2

3
单应性的相机姿势是错误的。有几种方法可以做到,其中有些是非常重要的。
mirror2image 2012年

我不明白为什么这是错的。我以此方式计算并可以正常工作。你为什么说错了?
Jav_Rock

3
您在最后一节中写道H ^ 1和R ^ 1相等,但是在第三节中您声明H = K [RT],这意味着R ^ 1实际上是K ^ -1H ^ 1。但这不是严格意义上的,因为有无限数量的H满足方程式,并且在求解R ^ 1,R ^ 2和T(未知标度)时会引起问题。您的答案无视稳健的本征和失真校准,并且某些方程式有误,因此这不是该问题的好答案。
buq2 2012年

是的,当我从代码中提取此值时,我在第三步中丢失了校正矩阵,并且在代码的另一个函数中乘以K。
Jav_Rock

3

尽管很好地解释了二维情况,但Jav_Rock提出的答案并未为三维空间中的相机姿势提供有效的解决方案。注意,对于该问题,存在多种可能的解决方案。

本文提供了用于分解单应性的封闭公式,但是这些公式有些复杂。

OpenCV 3已经完全实现了这种分解(decomposeHomographyMat)。给定单应性和正确缩放的本征矩阵,该函数将提供一组四个可能的旋转和平移。

在这种情况下,内在矩阵需要以像素为单位给出,这意味着您的主要点通常是(imageWidth / 2, imageHeight / 2),焦距通常是focalLengthInMM / sensorWidthInMM * imageHeight


什么是正确缩放的内在矩阵?
Guig

1
我已经更新了答案。请参阅上面。
Emiswelt

嘿@Emiswelt,焦距不是focalLengthInMM / sensorWidthInMM * imageWidth吗?为什么选择高度?
El Marce '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.