Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
3d 从消失点计算方向时,螺距的微小变化会导致180度旋转?_3d_Rotation_Computer Vision_Rotational Matrices - Fatal编程技术网

3d 从消失点计算方向时,螺距的微小变化会导致180度旋转?

3d 从消失点计算方向时,螺距的微小变化会导致180度旋转?,3d,rotation,computer-vision,rotational-matrices,3d,Rotation,Computer Vision,Rotational Matrices,我的数学一定在某个地方出错了,但我似乎找不到逻辑上的缺陷。我们可以使用2个(3个)世界系统消失点的位置计算相机相对于某个3D世界坐标系的旋转方向。如果相机几乎与世界系统对齐,我们可能会在图像平面上的位置(10000000,0)处找到X轴消失点,在位置(10000000)处找到Y轴消失点。这意味着这些轴上的线在图像中几乎是平行的。如果K是相机的内部参数,我们可以使用(向消失点矩阵添加1以使其成为3D): 要获得旋转矩阵的3列,结果接近: 1 0 0 0 1 0 0 0 1 这正是我们

我的数学一定在某个地方出错了,但我似乎找不到逻辑上的缺陷。我们可以使用2个(3个)世界系统消失点的位置计算相机相对于某个3D世界坐标系的旋转方向。如果相机几乎与世界系统对齐,我们可能会在图像平面上的位置
(10000000,0)
处找到X轴消失点,在位置
(10000000)
处找到Y轴消失点。这意味着这些轴上的线在图像中几乎是平行的。如果
K
是相机的内部参数,我们可以使用(向消失点矩阵添加1以使其成为3D):

要获得旋转矩阵的3列,结果接近:

1  0  0
0  1  0
0  0  1
这正是我们所期望的,因为系统几乎是一致的。但是,如果我们每隔如此轻微地倾斜摄影机,Y轴的线在图像平面上以负Y值收敛。例如,消失点位置现在可能显示在
(0,-10000000)
。但使用与前面相同的数学,我们得到的旋转矩阵为:

1  0  0
0 -1  0
0  0 -1

这表示绕X轴旋转180度。当然,我们面对的方向和以前几乎相同,所以180度旋转没有意义。我一定错过了什么,但我不知道是什么。有什么建议吗?谢谢

你从错误的假设开始。 (惯例:我们称围绕Y轴的运动为俯仰。但在相机惯例中Y轴是垂直的。在航空航天惯例中,垂直轴是Z。有时在计算机视觉中,最好称之为“平移”。滚动变为“倾斜”)

1) 如果有俯仰移动,则变化的是X轴的收敛。所以将vy从(0,1e6)移动到(0,-1e6)不是俯仰移动,而是绕X轴旋转(滚动)

2) 提醒一下,当正弦或余弦为零时,旋转矩阵可能具有奇点。因此,在这种情况下推导它们可能是一个问题

3) 从第二点开始,记得你说过:

导致接近于

这让一切都不同了!(我将用一些Matlab代码来证明) 我将反转投射3个世界符的方程式。我们对俯仰运动感兴趣,所以我将投影X轴versor(1,0,0)。请注意Z=0(该矢量位于图像平面上)* 让我们建立一个音高矩阵

如果我有一个小的正螺距(a=0.02),我的u等于

然后在小的负螺距(a=-0.02)下,u等于

  503.8997
    3.9997
    0.0200
这两个向量都是标准化的(除以大约500的范数),在这两种情况下都得到1,0,0,但是你肯定会丢失不同的“方向”信息。是的,这个例子是关于投影段的,但是想法是一样的

4) 您可以从r3中提取角度(理论上),而无需忽略接近零的分量

俯仰角(绕Y旋转)=弧角(r3(1)/r3(3))

滚动角(绕X旋转)=弧心(r3(2))

5) 如果逆时针旋转角度为正,则消失点应为正或负



*由于投影的点已位于图像平面中,即距离摄影机中心无限远的点,因此可以在右侧和左侧投影该点。始终小心处理“无限”问题,因为你从错误的假设开始。 (惯例:我们称围绕Y轴的运动为俯仰。但在相机惯例中Y轴是垂直的。在航空航天惯例中,垂直轴是Z。有时在计算机视觉中,最好称之为“平移”。滚动变为“倾斜”)

1) 如果有俯仰移动,则变化的是X轴的收敛。所以将vy从(0,1e6)移动到(0,-1e6)不是俯仰移动,而是绕X轴旋转(滚动)

2) 提醒一下,当正弦或余弦为零时,旋转矩阵可能具有奇点。因此,在这种情况下推导它们可能是一个问题

3) 从第二点开始,记得你说过:

导致接近于

这让一切都不同了!(我将用一些Matlab代码来证明) 我将反转投射3个世界符的方程式。我们对俯仰运动感兴趣,所以我将投影X轴versor(1,0,0)。请注意Z=0(该矢量位于图像平面上)* 让我们建立一个音高矩阵

如果我有一个小的正螺距(a=0.02),我的u等于

然后在小的负螺距(a=-0.02)下,u等于

  503.8997
    3.9997
    0.0200
这两个向量都是标准化的(除以大约500的范数),在这两种情况下都得到1,0,0,但是你肯定会丢失不同的“方向”信息。是的,这个例子是关于投影段的,但是想法是一样的

4) 您可以从r3中提取角度(理论上),而无需忽略接近零的分量

俯仰角(绕Y旋转)=弧角(r3(1)/r3(3))

滚动角(绕X旋转)=弧心(r3(2))

5) 如果逆时针旋转角度为正,则消失点应为正或负


*由于投影的点已位于图像平面中,即距离摄影机中心无限远的点,因此可以在右侧和左侧投影该点。始终小心处理“无限”

  495.9003
   -3.9997
   -0.0200
  503.8997
    3.9997
    0.0200