RT矩阵的各种变换

对计算机图形学/视觉中的RT矩阵之各种变换进行一下小小总结。

起因是折腾INRIA的无标跟踪库(Rox Odometry,以前叫ESM)。

库里提供了计算出的RT矩阵,但是用在OpenGL里边不对。

经过多番尝试终于成功。

总结一下:

(1) 左右手系转换:交换R矩阵的两列

即:

r11  r12  r13  t1

r21  r22  r23  t2

r31  r32  r33  t3

搞成这样:

r11  r13  r12  t1

r21  r23  r22  t2

r31  r33  r32  t3

(2) 解决某两个轴反着转的情况——即所叠加的模型和标志版转向相反:把R的一行反号

把原来的RT搞成这样:

-r11 -r13 -r12  t1

r21   r23   r22  t2

r31   r33   r32  t3

 

先这么多,以后再补充!

 

 

单应性变换矩阵分解为旋转矩阵R和平移向量T有以下方法: - **理论公式分解**:单应矩阵H可以表示为 $H = R + \frac{1}{d}tN^T$,其中R是旋转矩阵,t是平移向量,d是尺度因子,N是一个3x3的上三角矩阵,可通过此公式进行理论上的分解[^1]。 - **OpenCV函数分解**:OpenCV库中的`cv::decomposeHomographyMat`函数可用于将单应性矩阵分解为旋转矩阵、平移向量和法向量。该函数原型为`int cv::decomposeHomographyMat ( InputArray H, InputArray K, OutputArrayOfArrays rotations, OutputArrayOfArrays translations, OutputArrayOfArrays normals )`。其中,参数H为两个图像之间的输入单应性矩阵,参数K为输入的相机内参矩阵,参数rotations为旋转矩阵数组,参数translations为平移向量数组,参数normals为平面法向量数组。此函数能从给定的单应性矩阵中提取出多个可能的解,描述平面在两个不同视角之间的相对运动[^4]。 ```python import cv2 import numpy as np # 示例单应性矩阵 H = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=np.float64) # 示例相机内参矩阵 K = np.array([[1000, 0, 500], [0, 1000, 300], [0, 0, 1]], dtype=np.float64) rotations = [] translations = [] normals = [] # 调用函数进行分解 num_solutions = cv2.decomposeHomographyMat(H, K, rotations, translations, normals) print(f"分解得到的解的数量: {num_solutions}") for i in range(num_solutions): print(f"解 {i + 1}:") print("旋转矩阵:") print(rotations[i]) print("平移向量:") print(translations[i]) print("法向量:") print(normals[i]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值