我正在使用 opencv 对两个相机(我们将它们命名为 L 和 R)进行立体校准。我使用 20 对棋盘图像并计算 R 相对于 L 的变换。我想要做的是使用一对新图像,计算图像 L 中的 2d 棋盘角,根据我的校准变换这些点并绘制图像 R 上的相应变换点,希望它们与该图像中棋盘的角相匹配。
我尝试了将 2d 点从 [x,y] 转换为 [x,y,1] 的朴素方式,乘以 3x3 旋转矩阵,加上旋转向量然后除以 z,但结果是错误的,所以我猜猜这不是那么简单(?)
编辑(澄清一些事情):
我想这样做的原因基本上是因为我想在一对新图像上验证立体校准。所以,我实际上并不想在两个图像之间获得新的 2d 转换,我想检查我找到的 3d 转换是否正确。
这是我的设置:
我有与两个摄像机(E)相关的旋转和平移,但我没有相对于每个摄像机(E_R,E_L)的对象的旋转和平移。
理想情况下我想做的是:
- 从相机 L 中选择图像中的二维角(以像素为单位,例如 [100,200] 等)。
- 根据我找到的矩阵 E对二维点进行某种转换。
- 从相机 R 获取图像中相应的 2d 点,绘制它们,希望它们与实际角点匹配!
不过,我想得越多,我就越相信这是错误的/无法做到。
我现在可能正在尝试的事情:
- 使用相机的内在参数(比如说 I_R 和 I_L),求解 2 个最小二乘系统以找到 E_R 和 E_L
- 从相机 L 中选择图像中的 2d 角。
- 将这些角投影到相应的 3d 点 (3d_points_L)。
- 做:3d_points_R = (E_L).inverse * E * E_R * 3d_points_L
- 从 3d_points_R 获取 2d_points_R 并绘制它们。
当我有新东西时我会更新