从基本矩阵解释相机矩阵?

时间:2019-11-23 04:25:49

标签: matrix 3d

这是另一个堆栈溢出问题的跟进,这里: 3D Correspondences from fundamental matrix

就像这个问题一样,我正在尝试从基本矩阵中获取相机矩阵,最终目标是从2d点进行3d重建。给出的答案是正确的。我只是不明白。它说:“如果您可以使用Hartley和Zisserman的教科书,则可以查看9.5.3节,在哪里可以找到所需的内容。”他还提供了源代码的链接。

现在,这是the book的9.5.3节所说的:

  

结果9.12。非零矩阵F是基本矩阵   当且仅当PTFP时,对应于一对相机矩阵P和P   是倾斜对称的。

对我来说,那是胡言乱语。 (我抬头看是斜对称的-这意味着相反是负数。我不知道这与任何事物有什么关系。) 现在,这里是给出的源代码(source):

[U,S,V] = svd(F);
e = U(:,3);
P = [-vgg_contreps(e)*F e];

这也是一个谜。

所以我想知道的是,一个如何解释另一个?从该语句中获取代码似乎是不可思议的事情。我或任何人怎么会发现“当且仅当PTFP倾斜对称时,非零矩阵F才是对应于一对相机矩阵P和P的基本矩阵。”表示代码告诉您要做的事情,基本上 '进行奇异值分解。取第一个矩阵。以第三列为例。对它的值进行一些奇怪的重新排列。那就是你的答案。我将如何独自提出这些代码?

有人可以用简单的英语给我解释9.5.3节和此代码吗?

1 个答案:

答案 0 :(得分:0)

啊哈,“ PTFP”实际上是我也想知道的东西,在文学中找不到答案。但是,这是我想出的:

您提到的4x4斜对称矩阵不仅是任何矩阵。它实际上是基线的双重Plücker矩阵(另请参见https://en.wikipedia.org/wiki/Pl%C3%BCcker_matrix)。换句话说,它只会为您提供相机中心所在的线,这对诸如此类的重建任务没有用。

您提到的条件与更为普遍的事实相同,即视图1和0的基本矩阵是视图0和1的基本矩阵的负转置(此处使用MATLAB / Octave语法)

首先考虑基本矩阵将一个图像中的点 x0 映射到另一图像中的点 l1

Visual Studio 2019 for Mac

接下来,考虑投影矩阵的转置将图像中的线 l1 反投影到空间中的平面 E

l1=F*x0

(我发现这在大多数几何/计算机视觉类中都非常简单且被低估了)

现在,我将使用几何论证:如果两条线对应于同一对极平面,则它们是对应的对极线,即,任一条线的反投影都给出相同对极平面。代数:

E=P1'*l1

因此(重要的方程式)

E=P0'*l0
E=P1'*l1

现在我们快到了。假设我们有一个3D点 X 及其两个投影

P0'*l0=P1'*l1

和极线

x0=P0*X
x1=P1*X

我们可以将其放入重要的等式中,对于所有 X

l1=F*x0
l0=-F'*x1

最后

P0'*-F'*P1*X=P1'*F*P0*X

如您所见,左侧是右侧的负移调。所以这个矩阵是一个偏对称4x4矩阵。

我还在以下论文的II B节(本段末尾)中发表了这些想法。还应该解释为什么此矩阵代表基线。

P0'*-F'*P1=P1'*F*P0

@john ktejik的最后注记:偏斜对称表示矩阵与其负转置相同(不是逆转置)