我从事增强现实和视觉跟踪应用程序的相机姿态估计这一主题已有一段时间了,我认为尽管有很多关于此任务的详细信息,但仍然存在很多困惑和误解。
我认为接下来的问题值得详细的逐步解答。
- 什么是相机内在特性?
- 什么是相机外部性?
- 如何从平面标记计算单应性?
- 如果我有单应性,该如何获得相机姿势?
我从事增强现实和视觉跟踪应用程序的相机姿态估计这一主题已有一段时间了,我认为尽管有很多关于此任务的详细信息,但仍然存在很多困惑和误解。
我认为接下来的问题值得详细的逐步解答。
Answers:
重要的是要了解,这里唯一的问题是获取外部参数。相机内在特性可以离线测量,为此目的有很多应用。
什么是相机内在特性?
相机内部参数通常被称为相机校准矩阵,。我们可以写
哪里
α v ü v ˚F α Ù = ķ ü ˚F α v = ķ v ˚F ķ ù ķ v ù v和 是和坐标方向上的比例因子,并且与相机的焦距成比例:和。和是和方向上每单位距离的像素数。
被称为主要点,通常是图像中心的坐标。
ü v是偏斜,如果和不垂直,则仅是非零。
当内部特性已知时,将对相机进行校准。这很容易做到,因此它不是计算机视觉的目标,而是离线的琐碎步骤。
什么是相机外部性?
摄像机外部或外部参数是一个矩阵,对应于从世界坐标系到摄像机坐标系的欧几里得变换。 代表旋转矩阵,代表平移。3 × 4 R 3 × 3 t
计算机视觉应用程序专注于估计此矩阵。
如何从平面标记计算单应性?
同形异是同质的 ×矩阵,涉及3D平面及其图像投影。如果我们有一个平面则将点映射到该平面上的单应性和在投影下其对应的2D点为
为了计算单应性,我们需要点对世界相机。如果有平面标记,则可以对其图像进行处理以提取特征,然后在场景中检测这些特征以获得匹配。
我们只需要4对就可以使用Direct Linear Transform计算单应性。
如果我有单应性,该如何获得相机姿势?
单应性和摄像机姿态包含相同的信息,并且很容易彼此传递。两者的最后一列是翻译向量。单应性的列和两个也是相机姿态矩阵的列和两个。它仅位于列,并且由于必须正交,因此可以将其计算为第一列和第二列的叉积:
由于冗余,有必要对除以例如矩阵的元素[3,4] 进行归一化。
尽管很好地解释了二维情况,但Jav_Rock提出的答案并未为三维空间中的相机姿势提供有效的解决方案。注意,对于该问题,存在多种可能的解决方案。
本文提供了用于分解单应性的封闭公式,但是这些公式有些复杂。
OpenCV 3已经完全实现了这种分解(decomposeHomographyMat)。给定单应性和正确缩放的本征矩阵,该函数将提供一组四个可能的旋转和平移。
在这种情况下,内在矩阵需要以像素为单位给出,这意味着您的主要点通常是(imageWidth / 2, imageHeight / 2)
,焦距通常是focalLengthInMM / sensorWidthInMM * imageHeight
。
focalLengthInMM / sensorWidthInMM * imageWidth
吗?为什么选择高度?