式中,norm为求向量的模。反变换也可以很容易的通过如下公式实现:
OpenCV实现Rodrigues变换的函数为
int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian=0 );src为输入的旋转向量(3x1或者1x3)或者旋转矩阵(3x3)。
dst为输出的旋转矩阵(3x3)或者旋转向量(3x1或者1x3)。
jacobian为可选的输出雅可比矩阵(3x9或者9x3),是输入与输出数组的偏导数。
可以用上述方式法验证以下例子
验证代码如下:
#include <stdio.h> #include <cv.h> void 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(i=0; i<9; i++) { printf("%f\n",R_matrix[i]); } }