0

我正在尝试从没有棋盘的单个图像校准我的相机。为此,我使用了以下应用程序 ( http://w3.impa.br/~zang/qtcalib/index.html ),它使用 Tsai 的方法来校准相机。

应用程序返回固有矩阵、旋转矩阵和平移矩阵。

之后,我想从二维图像计算世界坐标。因此,为我的程序提供 2d 坐标 (x,y) 和矩阵(内在、旋转、平移)我想获得 3D 坐标 (X,Y,Z)。

我遵循了一些相关线程的指令(如果已知外在参数和内在参数,则从 2D 图像像素获取 3D 坐标),但结果并不如我所料。另外,我不知道我的起源(0,0,0)在哪里。

我究竟做错了什么?

4

1 回答 1

1

射影变换是

x = K * T * X

在哪里

K:内在
T:外在(您的旋转和平移)。将 X 转换为相机坐标系。
x:图像中的像素坐标
X:3D 坐标

将 2D 像素投影到 3D 相当于 3D 空间中的一条线,因此可能存在无限数量的 3D 点。要获得一个普通的 3D 坐标,您必须选择一个深度值。

您可以决定生成的 3D 坐标的原点:

  • 相机坐标系,[0;0;0]在相机中心:
    X' = inv(K) * x

  • 您的棋盘或 Tsai-grid 坐标系,[0;0;0] 通常位于角落之一:
    X' = inv(T) * inv(K) * x

然而,如前所述,X' 更像是一条线。您需要对其进行缩放以获得正确的 3D 坐标。

有时很难知道仿射变换在做什么。如果它不符合您的要求,一种快速的工程方法可能是用它的逆来尝试它:)

如果这对您没有帮助,您可以通过您的矩阵。

于 2014-11-27T14:44:46.553 回答