我有相机的内在矩阵。我做以下操作:from_matrix -〉as_quat -〉from_quat -〉as_matrix,它给出了不等于输入的输出:
from scipy.spatial.transform import Rotation as R
intrinsic = [[503.5763854980469, 0.0, 481.818115234375], [0.0, 499.7862854003906, 272.2569885253906], [0.0, 0.0, 1.0]]
r = R.from_matrix(intrinsic).as_quat()
r = R.from_quat([r[0], r[1], r[2], r[3]]).as_matrix()
print(r)
# r is equal to
[[ 0.64746546 -0.19920379 0.7355993 ]
[-0.19920379 0.88743756 0.41565903]
[-0.7355993 -0.41565903 0.53490302]]
1条答案
按热度按时间qlfbtfca1#
从the docs开始:
从旋转矩阵初始化。
3维旋转可以用3 x 3本征正交矩阵[1]表示。如果输入不是本征正交的,则使用[2]中描述的方法创建近似。
其中[2]指的是由F. Landis Markley, “Unit Quaternion from Rotation Matrix”, Journal of guidance, control, and dynamics vol. 31.2, pp. 440-442, 2008.表示的纸张。
您的输入非常不正交:
但返回的旋转矩阵应该是:
实际上,原始矩阵的特征值与正交矩阵的特征值完全不同(单位幅值复数):
我不熟悉这里使用的近似和假设,但是如果你没有提供一个合理的旋转矩阵,那么当你试图把它变成一个旋转矩阵时,得到不同的结果也就不足为奇了。