微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

深度视差矩阵Q

如何解决深度视差矩阵Q

我正在使用立体视觉和需要Q矩阵的命令cv2.reprojectimageTo3D()。我从cv2.stereoRectify()获得的Q矩阵为

Q = np.array([[1,357.10],[0,1,-138.90],4775.51],3.42,0]])

当我尝试将cv2.reprojectimageTo3D()与上述Q矩阵一起使用时,我得到了错误的值。另外,为什么Q [2,3]这么大?应用cv2.reprojectimageTo3D()后的单位是什么?

但是,许多建议使用

h,w = imgL.shape[:2]
f = 0.8 * w 
Q = np.float32([[1,-0.5*w],-1,0.5*h],-f],0]])

我有以下问题:

  1. 两个矩阵有什么区别?
  2. 用于校准和实际使用的基准是否必须相同?
  3. 如何使用图像调整大小来重新缩放Q?

谢谢。

解决方法

  1. 矩阵是相同的,除了建议的 Q 矩阵是在一般情况下使用的近似值。 -0.5*w0.5*h 值代表两个相机的主要点,就好像您将它们视为一个统一的相机一样。在从stereoRectify 获得的Q 矩阵中,这些相同的值大致是图像的中心x,y 像素值。 f 值以像素为单位,因此只要您的校准正确完成,大值应该是正确的。

  2. 校准和实际使用的基线必须相同,这些参数非常敏感。如果您想要获得良好的效果,对摄像机位置、偏斜等的任何细微调整都需要重新校准。

  3. 通常在校准和实际使用期间您应该使用相同的图像尺寸,但如果您想重新缩放,则需要使用相同的图像尺寸执行校准。您还可以尝试通过从旧图像大小到新图像大小的变化百分比来缩放 357.10 和 -138.90 值。

总的来说,您似乎关心 cv.reprojectImageTo3D() 的结果。其输出的单位在某种程度上是任意的,因为它们在世界框架坐标系中表示,其中原点 (x,y,z)=(0,1) 表示视野的中心并直接在镜头前。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。