【图像处理】一种求三维空间中两单位向量之间旋转矩阵的方法
2016-06-02 00:31
836 查看
矩阵相乘有多种含义,比如:从一种坐标系切换到另外的坐标系;空间中的运动。其中旋转矩阵相乘会改变物体的旋转角度,但不会改变物体形状和位置。单位向量可以看做一维物体,单位向量实际只有一个坐标轴,垂直于该坐标轴的其他两个坐标轴,无论怎么修改,对该单位向量并没有影响。现在我们已知两个单位向量,要求解一个向量va到另外一个向量vb的旋转矩阵,本质上可以理解为从前者对应的坐标系切换到后者对应的坐标系,与向量坐标轴相互垂直的两个坐标轴,只要满足垂直的要求即可,因为向量在垂直于向量方向上的旋转没有意义。
为了方便求解,我先考虑从[1,0,0]向量转换到va向量的旋转矩阵。显然[1,0,0]向量对应的是x轴,旋转到va向量等价于将x轴变换到va向量的坐标轴,那么新坐标系的x轴就是va,令新坐标系的x轴为va1=va。接下来我们要求得垂直于va的单位向量,那么应用叉乘计算可以得到va2=va1×[1,0,0]),va3=va1×va2→va2⊥va1,va3⊥va1,va2⊥va3将va2和va3都归一化,就得到了一个新坐标系,也可以说是旋转矩阵RotateMatrixA=[va1Tva2Tva3T]→RotateMatrixA⋅⎡⎣⎢100⎤⎦⎥=vaT用同样的方法获得[1,0,0]到vb的旋转矩阵RotateMatrixB,那么从va到vb的旋转矩阵为:RotateMatrixB⋅RotateMatrixA−1⋅vaT=vbT→RotateMatrix=RotateMatrixB⋅RotateMatrixA−1
其中需要2+2=4次叉乘,2+2=4次向量归一化,1次矩阵求逆和1次矩阵乘法才能获得旋转矩阵。这是一个笨办法,但是对数学苦手要友好的多。
为了方便求解,我先考虑从[1,0,0]向量转换到va向量的旋转矩阵。显然[1,0,0]向量对应的是x轴,旋转到va向量等价于将x轴变换到va向量的坐标轴,那么新坐标系的x轴就是va,令新坐标系的x轴为va1=va。接下来我们要求得垂直于va的单位向量,那么应用叉乘计算可以得到va2=va1×[1,0,0]),va3=va1×va2→va2⊥va1,va3⊥va1,va2⊥va3将va2和va3都归一化,就得到了一个新坐标系,也可以说是旋转矩阵RotateMatrixA=[va1Tva2Tva3T]→RotateMatrixA⋅⎡⎣⎢100⎤⎦⎥=vaT用同样的方法获得[1,0,0]到vb的旋转矩阵RotateMatrixB,那么从va到vb的旋转矩阵为:RotateMatrixB⋅RotateMatrixA−1⋅vaT=vbT→RotateMatrix=RotateMatrixB⋅RotateMatrixA−1
其中需要2+2=4次叉乘,2+2=4次向量归一化,1次矩阵求逆和1次矩阵乘法才能获得旋转矩阵。这是一个笨办法,但是对数学苦手要友好的多。
相关文章推荐
- PHP GD 图像处理组件的常用函数总结
- PHP图像处理之imagecreate、imagedestroy函数介绍
- jsvascript图像处理―(计算机视觉应用)图像金字塔
- Javascript图像处理思路及实现代码
- PHP图像处理之使用imagecolorallocate()函数设置颜色例子
- java数字图像处理基础使用imageio写图像文件示例
- 使用Java进行图像处理的一些基础操作
- javascript图像处理―边缘梯度计算函数
- Javascript图像处理―阈值函数实例应用
- Javascript图像处理―虚拟边缘介绍及使用方法
- PHP 二维数组和三维数组的过滤
- PHP图像处理类库及演示分享
- CI框架文件上传类及图像处理类用法分析
- php图像处理函数大全(推荐收藏)
- Javascript图像处理―图像形态学(膨胀与腐蚀)
- Javascript图像处理―平滑处理实现原理
- Swift图像处理之优化照片
- 在Ubuntu上安装OpenCV3.0和Python-openCV的经历
- CI框架文件上传类及图像处理类用法分析
- PHP 二维数组和三维数组的过滤