Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从pybullet理解视图和投影矩阵_Python_Graphics_Computer Vision - Fatal编程技术网

Python 从pybullet理解视图和投影矩阵

Python 从pybullet理解视图和投影矩阵,python,graphics,computer-vision,Python,Graphics,Computer Vision,在Pybullet中渲染图像时,必须使用getCameraImage,它将视图和投影矩阵作为输入(Pybullet还具有生成这些矩阵的功能)。理论上,投影矩阵应该是P=K[R | t],它可以重写为P=[M |-MC],因此我们可以在理论上使用M的RQ分解,其中R是上三角矩阵。因此,我们可以从投影矩阵中恢复K和[R | t](记住,从RQ分解得到的R不是从R | t得到的R)。但是当我使用例如scipy.linalg.rq时,结果不是有效的K(内在)矩阵 有人能解释一下投影矩阵是如何定义的吗?p

在Pybullet中渲染图像时,必须使用
getCameraImage
,它将视图投影矩阵作为输入(Pybullet还具有生成这些矩阵的功能)。理论上,投影矩阵应该是P=K[R | t],它可以重写为P=[M |-MC],因此我们可以在理论上使用M的RQ分解,其中R是上三角矩阵。因此,我们可以从投影矩阵中恢复K和[R | t](记住,从RQ分解得到的R不是从R | t得到的R)。但是当我使用例如
scipy.linalg.rq
时,结果不是有效的K(内在)矩阵


有人能解释一下投影矩阵是如何定义的吗?pybullet中的视图矩阵是什么?我们如何使用这些矩阵来检索内部和外部参数?

因此Pybillet通常使用视场(视场为rads)来构造投影矩阵()

本征矩阵定义为

p_x和p_y是主要点,通常是图像的中心。因此,有一些区别:

  • 尺寸。Pybullet添加第三行(不是第四行)和第四列以保留深度信息
  • 忽略第三行,元素2,2(零索引)不是1
  • Pybullet正在使用0倾斜参数
  • 它不使用焦距(它是,但它是从FOV计算)
  • Pybullet假设p_x=p_y=0
  • 首先,pybullet使用OpenGL的符号,因此它使用了一个主列顺序()。表示索引时的第一个元素是列而不是行。因此,pybullet的实际投影矩阵应进行转置

    第二,将FOV转换为焦距f的完整方程式为:

    因此pybullet将焦距乘以2/h。原因是因为PyScript使用标准化的设备坐标()来剪辑[-1,1]之间的值(将x除以宽度将其剪辑为[0,1],并将其乘以2个剪辑,在[0,2]之间,如果主点在图像1,1的中间点,则将其剪辑到[-1,1])。因此,pybullet的焦距是使用NDC的合适焦距

    投影矩阵第三列中的非零值用于映射OpenGL中的z值,因此我们可以忽略它们

    k、 k矩阵中的l是比值mm/px,如果我们使用pybullet,我们可以说k=l=1

    一些有用的资源是,和