在opencv坐标系中创建旋转矩阵

时间:2018-11-26 10:48:26

标签: opencv geometry coordinates coordinate-transformation

我一直在考虑从OpenCV坐标空间中的方向向量创建旋转矩阵,有一件事让我有些困惑。这是我从opencv函数获得的一个OpenCV旋转矩阵(让我们称此矩阵r):

array([[-0.4136457 , -0.19724711, 0.88881427],
       [-0.57926765, 0.810177 , -0.08978985],
       [-0.70238609, -0.55200255, -0.44938511]])

现在,从z轴单位矢量开始,我试图重新创建此矢量。因此,我有以下代码:

def basis(v):
    v = v / np.linalg.norm(v)
if v[0] > 0.9:
    b1 = np.asarray([0.0, 1.0, 0.0])
else:
    b1 = np.asarray([1.0, 0.0, 0.0])

b1 -= v * np.dot(b1, v)
b1 *= np.reciprocal(np.linalg.norm(b1))
b2 = np.cross(v, b1)
return b1, b2, v

我可以将此函数称为:

x, y, z = basis(r[:, 2])

然后我将旋转矩阵计算为:

avg = np.asarray([[x[0], y[0], z[0]],
[x[1], y[1], z[1]],
[x[2], y[2], z[2]]])

现在运行此代码将返回:

array([[ 0.4582676 , 0. , 0.88881427],
[ 0.17414826, -0.98061724, -0.08978985],
[ 0.8715866 , 0.19593324, -0.44938511]])

因此,沿x和y轴的符号被翻转。

现在,在我的基础函数中,如果我更改行     b1 = np.asarray([1.0, 0.0, 0.0])b1 = np.asarray([-1.0, 0.0, 0.0])。它以正确的符号返回,如:

array([[-0.4582676 , 0. , 0.88881427],
[-0.17414826, 0.98061724, -0.08978985],
[-0.8715866 , -0.19593324, -0.44938511]])

我猜想这与手感有关,因为opencv的原点在左上角,y轴在向下而不是向上方向增加,但是令我感到困惑的是为什么追赶符号向量的x坐标的差值是多少?我原本希望更改其他条件,例如b1 = np.asarray([0.0, 1.0, 0.0]),以使符号在y坐标中翻转。

0 个答案:

没有答案