我正在使用点云和多个图像。我知道相机的内在和外在参数。我想要的是找到旋转矩阵,它将旋转我的相机(不改变位置)以在某个方向上查看。更具体地说,我会将平面拟合到点云,然后我想将相机的观察方向对齐以垂直于平面查看(不改变其位置)。
因此,给定相机的旋转矩阵,我也会找到图像的单应变换。
请有人帮我解决这个问题。
我正在使用点云和多个图像。我知道相机的内在和外在参数。我想要的是找到旋转矩阵,它将旋转我的相机(不改变位置)以在某个方向上查看。更具体地说,我会将平面拟合到点云,然后我想将相机的观察方向对齐以垂直于平面查看(不改变其位置)。
因此,给定相机的旋转矩阵,我也会找到图像的单应变换。
请有人帮我解决这个问题。
设dir1
为相机的当前方向, 为相机的dir2
目标方向。计算归一化方向向量:
d1 = dir1 / |dir1|
d2 = dir2 / |dir2|
我们想要得到一个从d1
到旋转的矩阵d2
。换句话说,这个矩阵应该theta
在 的方向上绕轴旋转一个角度u
,其中:
u = (d1 x d2) / |d1 x d2| <-- normalized cross product of d1 and d2
sin(theta) = |d1 x d2| <-- the length of the cross product
cos(theta) = d1 * d2 <-- dot product of d1 and d2
最后,我们将上面的值代入这个公式(你可以在这里阅读更多内容),得到请求的矩阵:
假设x
是图像的中心然后说c = [a,b,1]
(这是考虑到图像是 2D 图像)。
现在你有了内在参数矩阵K
和外在旋转矩阵R
我们可以在这种风格中找到方向:
temp_X = inverse(K) * c
temp_X = transpose(R) * temp_X
direction = temp_X / norm(temp_X)
final direction = t - direction
我不知道这是否完全正确,但你可以试一试。