0

尝试使用“Matlab 的相机校准工具箱”中的外在和内在相机参数从相机图片中的 2D 像素坐标重建平面上点的 3D 坐标。

内在参数焦距:fc = [1017.21523 1012.54901] 主点:cc = [319.50000 239.50000]

外在参数平移向量:Tc_ext = [4.409693 -74.116018 393.057934] 旋转矩阵:Rc_ext = [-0.083632 0.991715 -0.097501 0.832136 0.015674 -0.554350 -37482.8025] -0.5482.8025 -0.5482.8025

任何人都可以帮助如何从相机图像中的 2d 获取平面上点的 3d 坐标吗?

4

1 回答 1

1

有 4 种情况需要考虑,按复杂度递增的顺序排列。基本目标是在空间中定位感兴趣的平面。拥有它之后,您可以将它与反向投影像素的光线相交,从而获得解决方案。

  1. 感兴趣的平面包含棋盘目标,并且图像是您用于校准相机的图像之一。然后是外在参数 [R | T] 对于校准例程返回的该图像包含答案,因为目标是该图像返回的世界到相机坐标变换的 XY 平面,并且世界原点是角之一(您可以看到哪个角它是将点 (0,0,0) 投影到图像坐标中。XY 平面(在相机坐标中)是旋转矩阵 R 的前两列所跨越的平面,其原点在点 T。
  2. 感兴趣的平面包含棋盘目标,但它的图像不是用于校准的图像之一。您可以将其添加到集合中,重新校准并转到 1.,但更快的替代方法是 (a) 像校准一样提取角点,(b) 从它们的图像位置计算单应性 H 到它们的“真" Z=0 处物理目标上的位置;(c) 将 H 分解为 K * [R | T] 使用校准中的已知 K(为此目的,您使用一种称为“RQ 分解”的算法,请查阅)。然后转到 1。
  3. 校准目标不在图像中,但您可以在图像中识别该平面上的至少 4 个点,这样它们中没有 3 个是共线的,并且它们彼此处于已知位置。例如,您在图像中看到一个已知边的矩形。然后,就像第 2 点一样。您可以计算这些物理点与其图像之间的单应性,并在知道相机矩阵的情况下提取 [R|T] 变换。然后转到 1。
  4. 以上都不是:对不起,你被卡住了。
于 2014-10-06T17:51:21.407 回答