当前位置: 首页 > 知识库问答 >
问题:

在标定的立体视觉装置中,如何获得实现三维三角化算法所需的“摄像机矩阵”?

东方俊材
2023-03-14

我试图实现Hartley&Zisserman的“多视图几何学”(第12.2节)中的(相对简单的)线性齐次(DLT)三维三角剖分方法,目的是在未来实现他们的完整的“最优算法”。现在,基于这个问题,我试图让它在Matlab中工作,稍后将把它移植到C++和OpenCV中,测试一致性。

问题是我不确定如何使用我拥有的数据。对立体摄像机进行了标定,得到了摄像机的两个本征矩阵、两个畸变系数向量、两个摄像机之间的旋转矩阵和平移向量,以及本质矩阵和基本矩阵。我也有两个点的2D坐标,这两个点应该是两个图像(分别由第一个和第二个摄像机拍摄)坐标系中单个3D点的对应。

该算法以两个点坐标和两个4×3″摄像机矩阵P和P′作为输入。这些显然不是从校准中获得的内在相机矩阵(M,M'),因为其中一个是3x3,也因为单独使用它们的投影将一个3D点放在两个不同的坐标系中,也就是说--外部(旋转/平移)数据丢失。

H&Z的书包含信息(第9章)从基本或基本矩阵恢复所需的矩阵使用SVD分解,但有额外的问题,它自己(例如,规模模糊)。我觉得我不需要,因为我已经明确定义了旋转和平移。

那么,问题是:使用第一个内禀矩阵和一个额外的零列作为第一个“相机矩阵”(P=[M0]),然后将第二个内禀矩阵乘以一个由旋转矩阵和平移向量组成的外禀矩阵作为额外的列,以获得所需的第二个“相机矩阵”(P'=M'*[Rt])是否正确?还是应该做得不同?

谢了!

共有1个答案

陈晟睿
2023-03-14

我没有我的H&Z手边--但他们关于这个主题的旧CVPR教程在这里(供其他人看看W.R.T这个问题)。

为了清楚起见(并使用他们的术语),投影矩阵P从欧几里得3空间点(X)到像点(X)的映射如下:

x = PX

其中:

P = K[ R | t ]
P = K [ I | 0]

P' = K' [ R | t ]

然后我们在基本矩阵F中寻求重建,这样:

x' F x = 0

当然,矩阵F可以用任意多种方法计算(有时更常见的是从未校准的图像中计算!)但在这里,我认为你可能想在上面已经校准过的相机矩阵的基础上这样做:

F = [P' C]_x P' pinv(P)
F = [t]_x M
P = [ I | 0 ] 
P' = [ M | t ]

使用这些来执行三角测量应该是相对简单的(假设良好的校准,没有噪声,等等)

 类似资料:
  • 我有一个完整的立体声校准与所有结果从(Python)OpenCV(即必要的输入和输出的立体整流)。 立体摄像机设置的可视化

  • base 西安 一面(30min): 第一个面试官: (1) 英文自我介绍 英文说我的家乡和陕西的不同 (2) 介绍一个自己的项目 问了下模型的数据量 (3) 介绍一下模型训练的流程 (4) 完成括号匹配需要使用什么数据结构,讲一下怎么实现 (5) 主要使用的语言:python 了解c++吗:本科用过,但现在不熟 ×(6) 指针和引用有什么区别:我知道指针是啥...但是引用想成了python里的引

  • 我是否也需要一个相机向上向量,这代表什么? 我在用GLM。

  • 线下笔试已过。 对着简历问的。 1、我硕士学了密码学,问我对称和非对称加密区别,分别有哪些算法,应用场景有哪些 2、中断机制 3、介绍小论文,问里面的东西 4、怎么防止过拟合

  • import scala.reflect.ClassTag import org.apache.spark.graphx._ /** * Compute the number of triangles passing through each vertex. * * The algorithm is relatively straightforward and can be computed

  • 问题内容: 我正在尝试使前置摄像头具有实时取景。我可以使用以下方法获取后置摄像头: 但是我似乎找不到找到前置摄像头的方法。如何更改上面的代码以使用前置摄像头? 问题答案: 这是我的一个项目的工作示例,用于获取前置摄像头。这是在Objective-C中实现的,但事实证明它是可行的,并且足够容易转换为快捷方式。 在Swift 3.2+中: