如何从单幅图像中获取相机变换矩阵?

Inf*_*ght 6 3d opencv matrix computer-vision projection-matrix

我有一个图像和几个已知点及其到图像平面的投影。(每个 3d 点都有到 2d 的投影)。我的目标是找到 4x4 矩阵,以便轻松计算任何 3d 点到图像平面的投影。我尝试使用本主题中的蒙特卡罗方法:如何将 2D 点反向投影为 3D? 但结果矩阵适用于 oXY 平面,不适用于 Z 坐标(非零 Z 的点投影不正确)。我还使用了 OpenCV.CalibrateCamera 方法。我得到了旋转矩阵、相机矩阵和平移向量,但它对于非零 Z 点也不好。另外,我对3个矩阵不感兴趣,我只想得到一个4x4的矩阵用于投影和非投影点。

看这张图片: 插图

我很确定我的问题已经解决,但不知道如何解决。

Inf*_*ght 2

最后,我找到了解决方案。它在http://ece.ucsb.edu/~manj/ece181bS04/ECE_181b_HW3/camera_matrix_key.pdf中进行了描述 。该方法的名称为“直接线性校准”,并且需要至少 6 个 3d 点及其到图像平面的投影。该方法返回相机矩阵 4*3,我尝试找到它。

更新: 我什至创建了 npm 包projection-3d-2d来帮助其他人解决这个问题。包相应地计算用于投影 2D 到 2D 和 3D 到 3D 的 3x3 和 4x4 矩阵。阅读更多