点绕坐标系旋转旋转矩阵推导、理解

点绕坐标系旋转旋转矩阵推导、理解

开会过程中,翻笔记本时突然发现了之前推导的点绕坐标系旋转的旋转矩阵求解过程。在直觉上,一个点绕3个坐标轴旋转的旋转矩阵在形式上看起来是一致的,观感上比较优雅、整齐,但是一直没有仔细观察背后的原理。因此又对这个过程进行了一次推导,对这种整齐有了更深的理解,同时对记忆也有所帮助。特此记录。

由于我们提到三维坐标系时,常用XYZ三个字母代替3个轴,为了不失一般性,避免字母先入为主产生的印象,在这里用UVW来指代右手三维坐标系。

大拇指指向轴线方向,四指方向为旋转的正方向

如下图所示。 坐标系UVW为右手坐标系,一个点绕W轴旋转 θ \theta θ角度前后的坐标为 ( U ′ , V ′ ) − − − > ( U , V ) (U^{'},V^{'})--->(U,V) (U,V)>(U,V) 求解旋转后的坐标(旋转矩阵)。
坐标系及旋转方向定义

为了方便求解,定义2个中间变量 R , δ R,\delta R,δR表示点到原点的距离,在旋转前后,点到原点的距离不变。
则有下列公式成立:

{ U ′ = R ∗ c o s δ V ′ = R ∗ s i n δ (1) \left\{ \begin{aligned} U^{'} = R*cos\delta \\ V^{'} = R*sin\delta \\ \tag{1} \end{aligned} \right. {U=RcosδV=Rsinδ(1)
{ U = R ∗ c o s ( δ + θ ) = R ∗ ( c o s δ c o s θ − s i n δ s i n θ ) V = R ∗ s i n ( δ + θ ) = R ∗ ( s i n δ c o s θ + c o s δ s i n θ ) (2) \left\{ \begin{aligned} U = R*cos(\delta+\theta) =R*(cos{\delta}cos{\theta}-sin{\delta}sin{\theta})\\ V = R*sin(\delta+\theta) =R*(sin{\delta}cos{\theta}+cos{\delta}sin{\theta}) \\ \tag{2} \end{aligned} \right. {U=Rcos(δ+θ)=R(cosδcosθsinδsinθ)V=Rsin(δ+θ)=R(sinδcosθ+cosδsinθ)(2)
式(1)式(2)结合:
{ U = R ∗ ( c o s δ c o s θ − s i n δ s i n θ ) = U ′ c o s θ − V ′ s i n θ V = R ∗ ( s i n δ c o s θ + c o s δ s i n θ ) = U ′ s i n θ + V ′ c o s θ (3) \left\{ \begin{aligned} U = R*(cos{\delta}cos{\theta}-sin{\delta}sin{\theta})=U^{'}cos{\theta}-V^{'}sin{\theta}\\ V = R*(sin{\delta}cos{\theta}+cos{\delta}sin{\theta})=U^{'}sin{\theta}+V^{'}cos{\theta} \\ \tag{3} \end{aligned} \right. {U=R(cosδcosθsinδsinθ)=UcosθVsinθV=R(sinδcosθ+cosδsinθ)=Usinθ+Vcosθ(3)
旋转前后点的W坐标不变,那么旋转后点的坐标可表示如下:
{ U = U ′ c o s θ − V ′ s i n θ V = U ′ s i n θ + V ′ c o s θ W = W ′ (4) \left\{ \begin{aligned} U & =U^{'}cos{\theta}-V^{'}sin{\theta}\\ V &= U^{'}sin{\theta}+V^{'}cos{\theta} \\ W &= W^{'} \\ \tag{4} \end{aligned} \right. UVW=UcosθVsinθ=Usinθ+Vcosθ=W(4)
将上面写为矩阵的形式:
[ U V W ] = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ U ′ V ′ W ′ ] (5) \begin{bmatrix} U \\ V \\ W \end{bmatrix} = \begin{bmatrix} cos{\theta} & -sin{\theta} & 0 \\ sin{\theta} & cos{\theta} & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} U^{'} \\ V^{'} \\ W^{'} \tag{5} \end{bmatrix} UVW=cosθsinθ0sinθcosθ0001UVW(5)
式(5)与图坐标系图放在一起进行考虑,如下图所示:
旋转说明

矩阵的第1行为旋转正方向的起点轴,第2行为旋转正方向的终点轴,第3行为旋转轴.


按照上面说明,我们在来回退到常用的XYZ代号的坐标系中.
1.点绕Z轴旋转,那么旋转正方向是由X指向Y,因此在上面图中,将UV分别替换为X,Y,W替换为Z,可得:
[ X Y Z ] = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ X ′ Y ′ Z ′ ] (6) \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} cos{\theta} & -sin{\theta} & 0 \\ sin{\theta} & cos{\theta} & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X^{'} \\ Y^{'} \\ Z^{'} \tag{6} \end{bmatrix} XYZ=cosθsinθ0sinθcosθ0001XYZ(6)
2.点绕Y轴旋转,那么旋转正方向是由Z指向X,因此在上面图中,将UV分别替换为Z,X,W替换为Y,可得:
[ Z X Y ] = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ Z ′ X ′ Y ′ ] (7) \begin{bmatrix} Z \\ X \\ Y \end{bmatrix} = \begin{bmatrix} cos{\theta} & -sin{\theta} & 0 \\ sin{\theta} & cos{\theta} & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} Z^{'} \\ X^{'} \\ Y^{'} \tag{7} \end{bmatrix} ZXY=cosθsinθ0sinθcosθ0001ZXY(7)
将上式展开,然后调整顺序并整理,可得:

[ X Y Z ] = [ c o s θ 0 s i n θ 0 1 0 − s i n θ 0 c o s θ ] [ X ′ Y ′ Z ′ ] (8) \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} cos{\theta} & 0 & sin{\theta} \\ 0 & 1 & 0 \\ -sin{\theta} & 0 & cos{\theta} \end{bmatrix} \begin{bmatrix} X^{'} \\ Y^{'} \\ Z^{'} \tag{8} \end{bmatrix} XYZ=cosθ0sinθ010sinθ0cosθXYZ(8)
3.点绕X轴旋转,那么旋转正方向是由Y指向Z,因此在上面图中,将UV分别替换为Y,Z,W替换为X,可得:
[ Y Z X ] = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ Y ′ Z ′ X ′ ] (9) \begin{bmatrix} Y \\ Z \\ X \end{bmatrix} = \begin{bmatrix} cos{\theta} & -sin{\theta} & 0 \\ sin{\theta} & cos{\theta} & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} Y^{'} \\ Z^{'} \\ X^{'} \tag{9} \end{bmatrix} YZX=cosθsinθ0sinθcosθ0001YZX(9)
将上式展开,然后调整顺序并整理,可得:
[ X Y Z ] = [ 1 0 0 0 c o s θ − s i n θ 0 s i n θ c o s θ ] [ X ′ Y ′ Z ′ ] (10) \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & cos{\theta} & -sin{\theta} \\ 0 & sin{\theta} & cos{\theta} \end{bmatrix} \begin{bmatrix} X^{'} \\ Y^{'} \\ Z^{'} \tag{10} \end{bmatrix} XYZ=1000cosθsinθ0sinθcosθXYZ(10)

综上,可以方便记忆坐标系中一个点绕X,Y,Z三轴的旋转矩阵.

<think>嗯,用户的问题是关于世界坐标系转换到摄像机坐标系旋转矩阵的计算方法和公式。首先,我需要回忆一下坐标系转换的基本概念。通常,这涉及到旋转和平移两个部分,也就是外参矩阵中的旋转矩阵R和平移向量T。 用户提到的引用中,引用[1]和[4]都提到了外参矩阵M_ext,它由旋转和平移组成。引用[2]和[3]提到通过solvePnP等方法解外参,可能需要特征。所以,旋转矩阵的计算通常需要已知对应的坐标,然后通过数学方法解。 首先,我需要明确坐标系转换的步骤。世界坐标系到相机坐标系的转换是通过旋转矩阵R和平移向量T实现的。公式应该是P_c = R * P_w + T,其中P_w是世界坐标,P_c是相机坐标。旋转矩阵R是3x3的正交矩阵,满足R^T R = I,行列式为1。 接下来,如何计算R呢?根据引用[2],当有至少6个非共面特征时,可以建立方程组解。这应该涉及到线性代数的方法,比如使用最小二乘法或QR分解。此外,引用[3]提到可以使用colmap或metashape等软件通过运动恢复结构来获得外参,这可能涉及到特征匹配和优化算法。 不过用户可能更关注手动计算或理论上的方法。例如,使用两组坐标系中的对应坐标,构建方程组,然后旋转矩阵。假设有多个对,每个对提供三个方程,但由于旋转矩阵的自由度是3(x、y、z轴的旋转角度),所以至少需要两个,不过通常需要更多来提高精度。 另外,旋转矩阵可以通过欧拉角、旋转向量或四元数来表示。使用旋转向量时,可以通过罗德里格斯公式转换为旋转矩阵。引用[2]提到的solvePnP方法返回旋转向量,然后转换成矩阵,这可能是一个常见步骤。 总结步骤应该是:1. 收集至少6个非共面的3D-2D对应;2. 构建投影方程,考虑内参矩阵K;3. 利用线性方法(如DLT)或非线性优化旋转和平移参数;4. 分解得到R矩阵,可能需要进行QR分解或SVD来确保正交性。 需要注意的是,实际应用中通常使用现有的算法或库(如OpenCV的solvePnP),而不是手动计算,但理解背后的数学原理对问题解决很重要。用户可能希望了解理论基础,所以需要详细说明公式推导和计算方法,包括可能的步骤和所需条件,如特征的数量和共面性要。</think>### 世界坐标系到摄像机坐标系旋转矩阵计算方法 #### 1. **坐标系转换的基本原理** 世界坐标系到摄像机坐标系的转换通过**外参矩阵**实现,包含旋转矩阵$R$(3×3)和平移向量$T$(3×1)。公式为: $$ P_c = R \cdot P_w + T $$ 其中: - $P_w = [X_w, Y_w, Z_w]^T$ 是世界坐标系中的坐标 - $P_c = [X_c, Y_c, Z_c]^T$ 是摄像机坐标系中的坐标 - $R$ 是旋转矩阵,描述世界坐标系到摄像机坐标系旋转变换 - $T$ 是平移向量,描述坐标原的偏移[^1][^4]。 --- #### 2. **旋转矩阵的计算步骤** 旋转矩阵的计算通常需要**已知对应坐标**,并通过以下方法解: ##### **方法一:利用3D-3D对应** 1. **收集对应**:获取至少3组非共面的世界坐标系$P_w$和摄像机坐标系$P_c$的对应坐标。 2. **构建方程**:根据$P_c = R \cdot P_w + T$,将问题转化为最小二乘优化问题: $$ \min_{R, T} \sum_{i=1}^n \| R \cdot P_{w,i} + T - P_{c,i} \|^2 $$ 3. **解步骤**: - **去中心化**:计算所有的质心$\bar{P_w}$和$\bar{P_c}$,并计算去中心化坐标$q_i = P_{w,i} - \bar{P_w}$,$p_i = P_{c,i} - \bar{P_c}$。 - **计算协方差矩阵**:$H = \sum_{i=1}^n q_i \cdot p_i^T$。 - **奇异值分解(SVD)**:对$H$进行SVD分解,$H = U \Sigma V^T$,则旋转矩阵为: $$ R = V \cdot U^T $$ - **计算平移向量**:$T = \bar{P_c} - R \cdot \bar{P_w}$[^2][^4]。 ##### **方法二:利用2D-3D对应(如solvePnP)** 当仅有2D图像与3D世界坐标的对应关系时(如相机标定场景): 1. **输入参数**:已知相机内参矩阵$K$、畸变系数、多组$(P_w, p_{pixel})$。 2. **构建投影方程**: $$ s \cdot p_{pixel} = K \cdot [R \mid T] \cdot \begin{bmatrix} P_w \\ 1 \end{bmatrix} $$ 其中$s$为尺度因子。 3. **旋转向量**:使用OpenCV的`solvePnP`方法,传入3D、2D、内参和畸变系数,直接输出旋转向量$\theta$(罗德里格斯形式)和平移向量$T$。 4. **旋转向量转矩阵**:通过罗德里格斯公式将旋转向量$\theta$转换为旋转矩阵$R$: $$ R = \cos(\theta) \cdot I + (1 - \cos(\theta)) \cdot \theta \theta^T + \sin(\theta) \cdot [\theta]_\times $$ 其中$[\theta]_\times$是向量的叉积矩阵[^2][^3]。 --- #### 3. **关键公式总结** - **旋转矩阵的性质**:$R$是正交矩阵,满足$R^T R = I$且$\det(R) = 1$。 - **外参矩阵**:完整的转换矩阵形式为: $$ M_{ext} = \begin{bmatrix} R & T \\ 0 & 1 \end{bmatrix} $$ --- #### 4. **实际应用注意事项** - **特征**:至少需要6组非共面解稳定解(超定方程组)[^2]。 - **数值稳定性**:推荐使用SVD分解或QR分解保证旋转矩阵的正交性。 - **工具实现**:实际工程中可直接调用`solvePnP`(OpenCV)或SFM工具(如COLMAP)[^3]。 --- 相关问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值