这是另一个堆栈溢出问题的跟进,这里: 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节和此代码吗?
答案 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的最后注记:偏斜对称表示矩阵与其负转置相同(不是逆转置)