Sas*_*ssa 5 opencv 2d computer-vision stereo-3d camera-calibration
我正在使用 opencv 对两个相机(让我们将它们命名为 L 和 R)进行立体校准。我使用 20 对棋盘图像并计算 R 相对于 L 的变换。我想要做的是使用一对新图像,计算图像 L 中的 2d 棋盘角,根据我的校准变换这些点并绘制图像 R 上对应的变换点,希望它们与该图像中棋盘的角相匹配。
我尝试了将 2d 点从 [x,y] 转换为 [x,y,1] 的简单方法,乘以 3x3 旋转矩阵,添加旋转向量,然后除以 z,但结果是错误的,所以我我猜事情没那么简单(?)
编辑(澄清一些事情):
我想这样做的原因基本上是因为我想验证一对新图像的立体校准。所以,我实际上不想在两个图像之间获得新的 2d 变换,我想检查我找到的 3d 变换是否正确。
这是我的设置:
我有与两个摄像机(E)相关的旋转和平移,但没有与每个摄像机(E_R,E_L)相关的对象的旋转和平移。
理想情况下我想做的是:
但我想得越多,我就越确信这是错误的/不可能做到的。
我现在可能正在尝试的:
当我有新的东西时我会更新
实际上很容易做到这一点,但是您犯了一些错误。请记住,立体校准后,R 和 L 将第二个相机的位置和方向与第一个相机的 3D 坐标系中的第一个相机相关联。还要记住通过一对摄像机找到一个点的 3D 位置,您需要对该位置进行三角测量。将 z 分量设置为 1 会犯两个错误。首先,您很可能使用了常见的 OpenCV 立体校准代码,并给出了棋盘角之间的距离(以厘米为单位)。因此,z=1 意味着距离相机中心 1 厘米,即距离相机非常近。其次,通过为所有点设置相同的 z,您可以说棋盘格垂直于主轴(又名光轴或主光线),而在您的图像中很可能并非如此。因此,您首先将一些虚拟 3D 点转换到第二个相机的坐标系,然后将它们投影到图像平面上。
如果你只想变换平面点,那么你可以找到两个相机之间的单应性(OpenCV 有该功能)并使用它。
| 归档时间: |
|
| 查看次数: |
3564 次 |
| 最近记录: |