关键词和网站的关系,做一个网站多少钱,哪个素材网站做美工最好,做暖漫画网站在做双目立体视觉深度图像生成的时候#xff0c;遇到旋转向量#xff08;1x3#xff09;与旋转矩阵#xff08;3x3#xff09;的概念#xff0c;得知二者可以通过罗德里格斯相互转化。
1.旋转的表示 处理三维旋转问题时#xff0c;通常采用旋转矩阵的方式来描述旋转变换… 在做双目立体视觉深度图像生成的时候遇到旋转向量1x3与旋转矩阵3x3的概念得知二者可以通过罗德里格斯相互转化。
1.旋转的表示 处理三维旋转问题时通常采用旋转矩阵的方式来描述旋转变换。旋转矩阵有以下两种方式得到。 物体在三维空间中的旋转可以被分为解为在直接坐标系下分别先后围绕x,y,z坐标轴旋转得到。旋转的角度也就是我们常听到的角度rollpitchyew。如果已知这几个角度就可以直接通过每一步的矩阵相乘得到整个旋转矩阵。 RR(yaw)R(pitch)R(roll) RR(yaw)R(pitch)R(roll)旋转矩阵还可以理解为围绕空间中某一个向量直接一次旋转某一个角度得到。在openCV相机标定时得到的旋转向量r就是用这种方式。即由旋转变量来描述。
2.旋转向量得到旋转矩阵 旋转向量的长度模表示绕轴逆时针旋转的角度弧度。旋转向量与旋转矩阵可以通过罗德里格斯Rodrigues变换进行转换。 旋转角度 θnorm(r) norm表示求向量r的模长 单位向量 (rx,ry,rz)r/θ 旋转矩阵 Rcos(θ)I(1−cos(θ))rrTsin(θ)∣∣∣∣∣0rz−ry−rz0rxry−rx0∣∣∣∣∣其中I
为单位矩阵rT
为r
的转置。 所以 rrT∣∣∣∣∣rx∗rxry∗rxrz∗rxrx∗ryry∗ryrz∗ryrx∗rzry∗rzrz∗rz∣∣∣∣∣3.根据旋转向量求另一个旋转向量 用r表示待旋转的向量v为旋转向量的单位向量θ为旋转角旋转后的向量可以表示为 r′rcos(θ)(1−cos(θ))(v⋅r)vsin(θ)(v×r)4.根据两个旋转向量求旋转矩阵 1旋转角度 已知旋转前向量为P, 旋转后变为Q。由点积定义可知 可推出PQ之间的夹角为 2旋转轴 旋转角所在的平面为有P和Q所构成的平面那么旋转轴必垂直该平面。 假定旋转前向量为a(a1, a2, a3) 旋转后向量为bb1, b2, b3)。由叉乘定义得 所以旋转轴c(c1, c2, c3)为 5.OpenCV实现Rodrigues变换的函数为 int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian0 ); src为输入的旋转向量3x1或者1x3或者旋转矩阵3x3。 dst为输出的旋转矩阵3x3或者旋转向量3x1或者1x3。 jacobian为可选的输出雅可比矩阵3x9或者9x3是输入与输出数组的偏导数。 验证代码如下
#include stdio.h
#include cv.hvoid main()
{int i;double r_vec[3]{-2.100418,-2.167796,0.273330};double R_matrix[9];CvMat pr_vec;CvMat pR_matrix;cvInitMatHeader(pr_vec,1,3,CV_64FC1,r_vec,CV_AUTOSTEP);cvInitMatHeader(pR_matrix,3,3,CV_64FC1,R_matrix,CV_AUTOSTEP);cvRodrigues2(pr_vec, pR_matrix,0);for(i0; i9; i){printf(%f\n,R_matrix[i]);}
}6、opencv另一种变换方法 //将旋转向量转化为旋转矩阵
Mat_float r_l (Mat_float(3, 1) 0.04345, -0.05236, -0.01810);//左摄像机的旋转向量
Mat_float r_r (Mat_float(3, 1) 0.04345, -0.05236, -0.01810);//右摄像机的旋转向量
Mat R_R, R_L;
Rodrigues(r_l, R_L);
Rodrigues(r_r, R_R);参考
1 http://blog.csdn.net/tl_tj/article/details/47006007
2 http://blog.sina.com.cn/s/blog_5fb3f125010100hp.html
3 根据旋转前后的两个向量值先求出旋转角度和旋转轴然后用罗德里格旋转公式即可求出对应的旋转矩阵。 https://www.cnblogs.com/xpvincent/archive/2013/02/15/2912836.html