如果对象具有6个已知点(已知3D坐标,和),则可以计算与对象坐标系有关的摄影机位置。žX,YZ
首先是一些基础知识。
均匀坐标是欧几里得坐标矢量表示,其中我们附加了所谓的比例因子,使得均匀坐标为。在您自己的计算中,尝试尽可能使不变(这意味着您可以通过将均匀坐标除以最后一个元素来对其进行“归一化”:)。我们还可以对2D点使用同质表示,例如(请注意,这些和ω X = ω [ X ÿ ž 1 ] Ť ω = 1 X ← X(X,Y,Z)ωX=ω[XYZ1]Tω=1 X=ω[ X ÿ 1 ]ω,X,ÿžX←Xωx=ω[XY1]ω,X,YZ每个点都不同(无论是2D还是3D点)。均质的坐标表示使数学更容易。
相机矩阵是从3D世界到图像传感器的投影矩阵:3×4
x=PX
其中是图像传感器上的点(以像素为单位),是投影的3D点(可以说它以毫米为单位)。XxX
我们记得两个3向量之间的叉积可以定义为矩阵向量乘法,这样:
v×u=(v)xu=⎡⎣⎢0v3−v2−v30v1v2−v10⎤⎦⎥u
注意交叉生产也很有用。v×v=0
现在,让我们尝试根据先前的方程式求解投影矩阵让我们将左侧的投影方程式与的叉积矩阵相乘:Px
(x)xx=(x)xPX=0
啊哈!结果必须为零向量。如果现在打开等式,我们得到:
⎡⎣⎢0w−y−w0xy−x0⎤⎦⎥⎡⎣⎢P1,1P2,1P3,1P1,2P2,2P3,2P1,3P2,3P3,3P1,4P2,4P3,4⎤⎦⎥X=⎡⎣⎢P3,4Wy−P2,1Xw−P2,2Yw−P2,4Ww+P3,1Xy−P2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1Xw−P3,4Wx+P1,2Yw−P3,1Xx+P1,3Zw−P3,2Yx−P3,3ZxP2,4Wx+P2,1Xx−P1,4Wy−P1,1Xy+P2,2Yx−P1,2Yy+P2,3Zx−P1,3Zy⎤⎦⎥=0
只需进行少量重构,我们就可以在矩阵之外获得投影矩阵:P
⎡⎣⎢⎢⎢0Xw−Xy0Yw−Yy0Zw−Zy0Ww−Wy−Xw0Xx−Yw0Yx−Zw0Zx−Ww0WxXy−Xx0Yy−Yx0Zy−Zx0Wy−Wx0⎤⎦⎥⎥⎥⎡⎣⎢⎢P1P2P3⎤⎦⎥⎥=0
其中是的转置:摄像机矩阵的第i行。前一个(大)矩阵方程的最后一行是前两行的线性组合,因此不会带来任何其他信息,因此可以忽略。PnnP
稍作停顿,以便我们集中精力。请注意,必须为每个已知的3D-> 2D对应关系形成前一个矩阵方程(必须至少有6个)。
现在,对于每一个点对应,计算上述矩阵的前两行,可堆叠在彼此的顶部矩阵,你会得到新的矩阵为其2×12A
A⎡⎣⎢P1P2P3⎤⎦⎥=0
由于我们有12个未知数和(至少)12个方程式,因此可以解决。唯一的问题是我们不想得到简单的答案,其中
⎡⎣⎢P1P2P3⎤⎦⎥=0
幸运的是,我们可以使用奇异值分解(SVD)强制
∥⎡⎣⎢P1P2P3⎤⎦⎥∥=1
因此,为了求解方程式,计算矩阵 SVD 并选择对应于最小特征值的奇异矢量。该向量是矩阵A的零向量,也是相机矩阵。只需堆叠并形成。AP[P1P2P3]TP
现在您想知道到物体的距离。定义为:P
P=K[R−RC]
其中是相对于对象原点的相机位置。可以通过计算 s零向量从求解。CPP
(Zarterman的Hartley-计算机视觉中的多视图几何)
最后,当您计算两帧的摄像机位置时,可以通过求解两个方程来计算未知对象的位置(或对象某些点的位置):X
x1=P1Xx2=P2X
与我们解决相机矩阵的方式几乎相同:
(x1)xP1X=0(x2)xP2X=0
等等。