首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >cv2.calibrateHandEye在提供3x1旋转向量或3x3旋转矩阵时输出不同的结果

cv2.calibrateHandEye在提供3x1旋转向量或3x3旋转矩阵时输出不同的结果
EN

Stack Overflow用户
提问于 2020-12-12 02:13:14
回答 1查看 249关注 0票数 0

我目前正在尝试使用opencv的手眼校准函数(cv2.calibrateHandEye())来校准Microsoft Azure Kinect。然而,当我插入3x1旋转向量作为输入,而不是3x3旋转矩阵时,我得到了与所有方法完全不同的结果。下面,我将分享我在这两种情况下得到的输出。

我想知道为什么会出现这种差异,因为我使用cv2.Rodrigues在向量和矩阵之间进行转换。

代码语言:javascript
运行
复制
3x1 Rotation Vector case:
(19, 3) (19, 3) (19, 3) (19, 3)       
--------------------------------------
Method 0
Rotation:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
Translation:
 [[0.]
 [0.]
 [0.]]
--------------------------------------
--------------------------------------
Method 1
Rotation:
 [[nan nan nan]
 [nan nan nan]
 [nan nan nan]]
Translation:
 [[0.]
 [0.]
 [0.]]
--------------------------------------
--------------------------------------
Method 2
Rotation:
 [[-1.  0.  0.]
 [ 0. -1.  0.]
 [ 0.  0.  1.]]
Translation:
 [[0.]
 [0.]
 [0.]]
--------------------------------------
--------------------------------------
Method 3
Rotation:
 [[-0.03388477  0.81429681  0.57945882]
 [ 0.37003643 -0.52836555  0.76413538]
Translation:
 [[0.]
 [0.]
 [0.]]
--------------------------------------
--------------------------------------
Method 4
Rotation:
 [[nan nan nan]
 [nan nan nan]
 [nan nan nan]]
Translation:
 [[nan]
 [nan]
 [nan]]
--------------------------------------

3x3 Rotation Matrix case:
(19, 3, 3) (19, 3) (19, 3, 3) (19, 3)
--------------------------------------
Method 0
Rotation:
 [[ 0.19681749  0.15272093 -0.96847261]
 [-0.9802481   0.01110192 -0.19745987]
 [-0.01940435  0.988207    0.15188945]]
Translation:
 [[426.01991564]
 [  6.31112392]
 [212.62483639]]
--------------------------------------
--------------------------------------
Method 1
Rotation:
 [[ 4.38898532e-04  7.05825236e-02  9.97505847e-01]
 [-9.99993453e-01 -3.55184483e-03  6.91318082e-04]
 [-3.59178096e-03  9.97499620e-01 -7.05805026e-02]]
Translation:
 [[ 113.83854629]
 [ -64.48053741]
 [-155.89394605]]
--------------------------------------
--------------------------------------
Method 2
Rotation:
 [[-1.63313542e-04  1.12303599e-01 -9.93673928e-01]
 [-9.99994011e-01 -3.45353893e-03 -2.25961739e-04]
 [-3.45706791e-03  9.93667940e-01  1.12303491e-01]]
Translation:
 [[429.63163945]
 [-72.98653944]
 [228.31050502]]
--------------------------------------
--------------------------------------
Method 3
Rotation:
 [[ 0.27525174  0.87240146  0.403921  ]
 [ 0.20267468  0.35804992 -0.91144019]
 [-0.93976564  0.33274006 -0.07825982]]
Translation:
 [[-126.85624931]
 [ 205.9095892 ]
 [  90.09963159]]
--------------------------------------
--------------------------------------
Method 4
Rotation:
 [[-0.20970054  0.33923475 -0.91703079]
 [-0.94475058 -0.31195916  0.1006371 ]
 [-0.25193655  0.88746902  0.38591023]]
Translation:
 [[ 716.47999662]
 [-112.67040497]
 [ 604.15236449]]
--------------------------------------
EN

回答 1

Stack Overflow用户

发布于 2021-12-02 13:21:18

对你来说可能太晚了,但对其他人来说可能很有趣:我偶然发现了同样的bug,在我的例子中,我有一个用于R_gripper2base的Mat向量。我使用push_back将实际的旋转放在列表的末尾。当我使用向量作为输入时,一切都很好,但使用罗德里格斯矩阵时,push_back不仅将实际矩阵放在末尾,还更改了列表中其他所有条目的值。所以最后我得到了一个矩阵的向量,它们都是一样的。这就是为什么calibrateHandEye的结果很糟糕。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65256538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档