我正在使用opencv进行两个相机(我们称之为L和R)的立体校准。我使用20对棋盘图像,并计算R相对于L的变换。我想做的是使用一对新图像,在图像L中计算2D棋盘角点,根据我的校准转换这些点,并在图像R上绘制相应的变换点,希望它们能匹配该图像中的棋盘角点。
我尝试了一种简单的方法,将2D点从[x,y]转换为[x,y,1],乘以3x3旋转矩阵,加上旋转向量,然后除以z,但结果是错误的,所以我猜这不是那么简单(?)
编辑(澄清一些事情):
我想这样做的原因基本上是我想验证新图像的立体校准。因此,我实际上不想获得两个图像之间的新2D变换,我想检查我找到的3D变换是否正确。
这是我的设置: 我有两个相机之间的旋转和平移关系(E),但是我没有物体在每个相机中的旋转和平移关系(E_R,E_L)。
理想情况下,我想做以下事情:
1. 从相机L中选择2D角落(以像素为单位,例如[100,200]等)。 2. 基于我找到的矩阵E,在2D点上执行某种变换。 3. 获取来自相机R的图像中相应的2D点,绘制它们,并希望它们与实际角落匹配!
然而,我越想越觉得这是错误的/无法完成。
现在我可能正在尝试什么:
我尝试了一种简单的方法,将2D点从[x,y]转换为[x,y,1],乘以3x3旋转矩阵,加上旋转向量,然后除以z,但结果是错误的,所以我猜这不是那么简单(?)
编辑(澄清一些事情):
我想这样做的原因基本上是我想验证新图像的立体校准。因此,我实际上不想获得两个图像之间的新2D变换,我想检查我找到的3D变换是否正确。
这是我的设置: 我有两个相机之间的旋转和平移关系(E),但是我没有物体在每个相机中的旋转和平移关系(E_R,E_L)。
理想情况下,我想做以下事情:
1. 从相机L中选择2D角落(以像素为单位,例如[100,200]等)。 2. 基于我找到的矩阵E,在2D点上执行某种变换。 3. 获取来自相机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并绘制它们。
如果有新内容我会更新。