我正在尝试实现 Hartley & Zisserman 的《多视角几何》(第12.2节)中相对简单的线性齐次(DLT)3D三角测量方法,旨在未来实现他们的完整“最优算法”。目前,基于this question,我正在尝试在Matlab中让它正常工作,并将其移植到C++和OpenCV中,在此过程中进行一致性测试。
问题是我不确定如何使用我拥有的数据。我已经校准了我的立体相机组,并获得了两个内部相机矩阵,两个畸变系数向量,关联两个相机的旋转矩阵和平移向量,以及本质矩阵和基础矩阵。我还有两个点的2D坐标,这些点应该是两张图像中单个3D点的对应物(分别由第一个和第二个相机拍摄)。
该算法的输入为两个点坐标和两个4x3的“相机矩阵”P和P'。这些明显不是从校准中获得的内在相机矩阵(M,M'),因为首先它们是3x3的,而且仅使用它们进行投影会将3D点放置在两个不同的坐标系中,即-缺少外在(旋转/平移)数据。
H&Z书籍包含有关从基本矩阵或本质矩阵中使用SVD分解恢复所需矩阵的信息(第9章),但还存在其他问题(例如,比例歧义)。我觉得我不需要那个,因为我已经明确定义了旋转和平移。
问题是:是否应该使用第一个内在矩阵,作为第一个“相机矩阵”的额外列为零(P = [M | 0]),然后将第二个内在矩阵乘以由旋转矩阵和平移向量组成的外在矩阵作为额外列以获得第二个所需的“相机矩阵”(P'=M'*[R|t])?还是应该用其他方法?
谢谢!
问题是我不确定如何使用我拥有的数据。我已经校准了我的立体相机组,并获得了两个内部相机矩阵,两个畸变系数向量,关联两个相机的旋转矩阵和平移向量,以及本质矩阵和基础矩阵。我还有两个点的2D坐标,这些点应该是两张图像中单个3D点的对应物(分别由第一个和第二个相机拍摄)。
该算法的输入为两个点坐标和两个4x3的“相机矩阵”P和P'。这些明显不是从校准中获得的内在相机矩阵(M,M'),因为首先它们是3x3的,而且仅使用它们进行投影会将3D点放置在两个不同的坐标系中,即-缺少外在(旋转/平移)数据。
H&Z书籍包含有关从基本矩阵或本质矩阵中使用SVD分解恢复所需矩阵的信息(第9章),但还存在其他问题(例如,比例歧义)。我觉得我不需要那个,因为我已经明确定义了旋转和平移。
问题是:是否应该使用第一个内在矩阵,作为第一个“相机矩阵”的额外列为零(P = [M | 0]),然后将第二个内在矩阵乘以由旋转矩阵和平移向量组成的外在矩阵作为额外列以获得第二个所需的“相机矩阵”(P'=M'*[R|t])?还是应该用其他方法?
谢谢!