如何解决来自 EstimatePoseSingleMarkers 的变换矩阵
我尝试从我的相机到 aruco 标记的中点获取变换矩阵,并使用 cv2.aruco.estimatePoseSingleMarkers
函数。
在描述中说:
返回的转换是将点从每个标记坐标系转换到相机坐标系的转换。
我将标记检测结果的角点交给位姿估计函数,并将带有 cv2.Rodriguez 的旋转向量转换为旋转矩阵。得到的平移向量已经不同于从相机坐标到标记坐标的测量平移,据我所知它应该是相同的。
无论推断如何,我都会初始化一个 4x4 变换矩阵,并将旋转矩阵和来自姿态估计的平移向量放入 4x4 矩阵,我认为它提供了从标记坐标系到相机坐标系的变换,但是当我用环境中的另一个点纠正变换,表明变换矩阵不正确。
我确定 MARKER_SIZE。
marker2camera_r_vec,marker2camera_t_vec,_ = cv2.aruco.estimatePoseSingleMarkers(corners,MARKER_SIZE,camera.mtx,camera.dist)
marker2camera_r_mat = np.array(cv2.Rodrigues(marker2camera_r_vec)[0])
transformation_matrix = np.zeros([4,4])
transformation_matrix[0:3,0:3] = rotation_matrix
transformation_matrix[0:3,3] = translation_vector
transformation_matrix[3,3] = 1
Example results:
marker2camera_r_mat =
[[-0.96533802 -0.03093691 -0.25916292],[ 0.07337548 0.92073721 -0.38322189],[ 0.25047664 -0.38895487 -0.88655263]]
marker2camera_t_vec =
[ 1.45883855 6.98282269 77.73744481]
transformation_matrix =
[[-9.65338018e-01 -3.09369077e-02 -2.59162919e-01 1.45883855e+00],[ 7.33754824e-02 9.20737214e-01 -3.83221895e-01 6.98282269e+00],[ 2.50476645e-01 -3.88954869e-01 -8.86552627e-01 7.77374448e+01],[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00]]
Actual point coordinates of the marker from the camera coordinates is =
[-0.086 0.12 0.83]
谁能告诉我我做错了什么并解释了通过 cv2.aruco.estimatePoseSingleMarkers
获取从相机坐标到标记坐标的变换矩阵的步骤?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。