【发布时间】:2020-04-01 01:28:18
【问题描述】:
我正在尝试验证一种解决方案,将像素点 (u,v) 反投影到 3D 世界位置 (x,y,z) 中,除了 (u,v) 之外,仅使用相机的外部旋转和平移。
我在 Unreal 中对问题进行了建模,其中我有一个虚拟相机,其世界位置 (1077,1133,450) 和旋转 yaw=90,pitch=345,roll=0 度。我有一个已知 3D 位置 (923,2500,0) 的对象,由 1280x720 相机在像素位置 (771,426) 或帧中心位置 (131,-66) 看到。
我的旋转矩阵的转置是:
[[ 5.91458986e-17 9.65925826e-01 -0.00000000e+00]
[-1.00000000e+00 6.12323400e-17 0.00000000e+00]
[-1.58480958e-17 -2.58819045e-01 9.65925826e-01]]
我的 Tx_Ty_Tz 矩阵是:
[[-1094.39396119]
[ 1077. ]
[ -141.42464373]]
我的 dx_dy_dz 矩阵是
[[ -63.75110454]
[-131. ]
[ 18.0479828 ]]
我最终将位置 (-1593,50,0) 作为反投影的世界坐标,这显然是错误的。我的矩阵之一是否计算不正确?如果没有,提供的方法是否有缺陷/不完整?
【问题讨论】:
-
我认为您链接的解决方案不是一个好的解决方案(但也许我遗漏了什么?)。问题是您的世界坐标的单位与相机帧中的单位不同(取决于像素大小)。您链接到的帖子中的 d 向量似乎仍在相机框架中,并且仍然需要乘以视野等才能为您提供世界坐标中的 3d 点。
标签: opencv computer-vision linear-algebra