我想实现的(相对简单)线性齐(DLT)3D三角测量法哈特利&Zisserman的“多视图几何”(12.2秒)方法,在未来实现其全部,“优化算法”的目的。 现在,基于这个问题 ,我试图让它在Matlab工作,稍后将它移植到C ++和OpenCV,测试一路走来的一致性。
问题是,我不能确定如何使用我的数据。 我已校准的我的立体声钻机,和获得的两个固有照相机矩阵,畸变系数,旋转矩阵和与所述两个照相机的平移矢量的两个矢量,以及基本和基本矩阵。 我也有的,都应该是在两个图像的坐标系统的单个3D点的对应关系的两个点的二维坐标(分别取由第一和第二照相机)。
该算法中,输入两个点坐标和两个4×3“照相机矩阵” P和P”。 这些都不是很明显从校准获得的固有照相机矩阵(M,M'),因为对于一个它们是3×3,并且还因为投影单独使用它们把一个3D点在两个不同的坐标系统,即 - 的外源性(旋转/平移)数据丢失。
为H&Z本书包含来自任一基本或使用SVD分解的基本矩阵中回收所需要的矩阵中的信息(第9章),但与它自己的附加问题(例如刻度模糊)。 我觉得我不需要这样,因为我有旋转和平移明确定义。
接下来的问题是:这将是正确使用第一本征矩阵,用零作为第一个“照相机矩阵”的一个额外的列(P = [M | 0]),然后通过一个非本征矩阵乘以第二本征矩阵从旋转矩阵和平移矢量构成作为一个额外的列,以获得第二所需“照相机矩阵”(P“= M” * [R | T])? 或者应该怎样做呢?
谢谢!
我没有我的H&Z到手-但关于这个问题他们的老CVPR教程是在这里 (其他任何人看看WRT这个问题)。
只是为了清楚(和使用他们的术语)从欧几里德3空间点(X)的投影矩阵P映射到的图像的点(x)为:
x = PX
哪里:
P = K[ R | t ]
由(3×3)的相机校准矩阵K和(3×3)的旋转矩阵R和平移矢量(3×) 吨定义。
而问题的症结似乎是那么如何使用您的两个摄像头P和P”进行三角测量。
我相信你的提议,世界原点位于第一相机P,因此:
P = K [ I | 0]
和
P' = K' [ R | t ]
我们则寻求在基础矩阵F,使得重建:
x' F x = 0
矩阵F当然可以(从非标定图像有时更常用!)计算的任何数量的方式,但在这里我想你可能想这样做,你已校准的相机矩阵上面的基础上:
F = [P' C]_x P' pinv(P)
其中C = (0 1)
是第一相机和中心pinv(P)
是P的伪逆。 的_x
表示在文献中用于矩阵乘法来计算的向量积的符号。
然后,可以执行基本矩阵F(经由SVD或直接方法来执行)的因式分解。
F = [t]_x M
因此,当你正确的状态,我们可以直接再根据三角测量计算:
P = [ I | 0 ]
和
P' = [ M | t ]
然后使用这些来执行三角测量应该是相对简单的(假设良好校准,缺乏噪声的,等等,等等)
文章来源: In a calibrated stereo-vision rig, how does one obtain the “camera matrices” needed for implementing a 3D triangulation algorithm?