Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 基本矩阵的投影矩阵_Matlab_Opencv_Computer Vision_Camera Calibration - Fatal编程技术网

Matlab 基本矩阵的投影矩阵

Matlab 基本矩阵的投影矩阵,matlab,opencv,computer-vision,camera-calibration,Matlab,Opencv,Computer Vision,Camera Calibration,我得到了两个摄像机之间的基本矩阵。我也在一个3x3矩阵中有它们的内部参数,这是我之前通过棋盘获得的。通过使用基本矩阵,我得到了P1和P2 P1=[I|0]和P2=[[e']x*F|e'] 这些投影矩阵在获得精确的三维位置时并没有真正的用处。 因为我有内部参数K1和K2,所以我将P1和P2更改为 P1=K1*[I|0]和P2=K2*[[e']x*F|e'] 这是获得真实投影矩阵的正确方法吗?真实投影矩阵给出了3D世界和图像之间的实际关系 如果没有,请帮助我了解正确的方法以及我的错误所在 如果这是

我得到了两个摄像机之间的基本矩阵。我也在一个
3x3
矩阵中有它们的内部参数,这是我之前通过棋盘获得的。通过使用基本矩阵,我得到了
P1
P2

P1=[I|0]
P2=[[e']x*F|e']

这些投影矩阵在获得精确的三维位置时并没有真正的用处。 因为我有内部参数
K1
K2
,所以我将
P1
P2
更改为

P1=K1*[I|0]
P2=K2*[[e']x*F|e']

  • 这是获得真实投影矩阵的正确方法吗?真实投影矩阵给出了3D世界和图像之间的实际关系
  • 如果没有,请帮助我了解正确的方法以及我的错误所在
  • 如果这是正确的方法,我如何验证这些矩阵
  • 哈特利和齐瑟曼的《计算机视觉中的多视图几何》是一本很好的参考书。 首先,你的P公式是错误的。如果你想要里面有K的公式,它是

    P = K * [R | t]
    

    但不是两者兼而有之

    如果从8点算法计算F,则只能将投影几何体恢复到三维单应(即4x4变换)

    要升级到欧几里德空间,有两种可能性,都是从计算基本矩阵开始的

    第一种可能性是从F:E=转置(K2)*F*K1计算基本矩阵

    第二种可能性是直接估计这两种视图的基本矩阵:

    • 通过预乘以每个图像的K的倒数(“标准化图像坐标”),对2D点进行标准化
    • 在这些标准化点上应用(与F相同)8点算法
    • 通过SVD分解和强制对角线值,强制本质矩阵的2个奇异值等于1,最后一个奇异值为0
    一旦你有了基本矩阵,我们就可以用

    P = K * [R | t]
    
    R和t可以通过E的SVD元素找到(参见前面提到的书)。 但是,您将有4种可能性。其中只有一个在两个摄像机前投影点,因此您应该测试一个点(如果您确定),以消除这4个点之间的模糊性。 在这种情况下,您将能够在3D场景中放置摄影机及其方向(使用投影的R和t)


    不太明显,事实上…

    如果你没有摄像机参数K1,K2怎么办?那么你必须计算基本矩阵F
    P = K * [R | t]