原文:
從今天開始,把自己學習opencv的心得記錄下來,以系列的形式貼到部落格中,以期交流與備查之用,筆記內容主要偏向於演算法的理解。處理三維旋轉問題時,通常採用旋轉矩陣的方式來描述。乙個向量乘以旋轉矩陣等價於向量以某種方式進行旋轉。除了採用旋轉矩陣描述外,還可以用旋轉向量來描述旋轉,旋轉向量的長度(模)表示繞軸逆時針旋轉的角度(弧度)。旋轉向量與旋轉矩陣可以通過羅德里格斯(rodrigues)變換進行轉換。
演算法過程如下:
式中,norm為求向量的模。反變換也可以很容易的通過如下公式實現:
opencv實現rodrigues變換的函式為
intsrc為輸入的旋轉向量(3x1或者1x3)或者旋轉矩陣(3x3)。cvrodrigues2( const
cvmat
*src
,cvmat
*dst
,cvmat
*jacobian
=0 );
dst為輸出的旋轉矩陣(3x3)或者旋轉向量(3x1或者1x3)。
jacobian為可選的輸出雅可比矩陣(3x9或者9x3),是輸入與輸出陣列的偏導數。
可以用上述方式法驗證以下例子
驗證**如下:
#include< stdio.h>
#include< cv.h>
void
main()
;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++)}
羅德里格斯公式推導
k為單位向量,向量v繞旋轉軸k旋轉 得到向量vrot,那麼就有下面的旋轉方程使等式成立 vrot rv 而這個旋轉方程就是羅德里格斯方程 r cos i 1 cos kk sin k 下面開始推導 向量分解 v v k k 向量點乘得標量,k為單位向量 vrot vrot v vrot a b 由圖...
雙目測距測深度 科普 雙目測距原理
參考資料 1 深度相機原理揭秘 雙目立體視覺 2 雙目測距原理 3 相機標定原理及實現 1 雙目測距基本原理 如圖所示,p點是待測物體,camera r和camera l代表相機的光心位置,兩綠點為點p在兩個相機感光器上的成像點,f為相機焦距,b為兩相機中心距,z為所求深度資訊,兩綠點間距為d。d ...
VR開發 羅德里格公式的研究
最近在做vr方面的研究,看到了google cardboard對感測器處理的 對旋轉矩陣 羅德里格公式做了一些研究。羅德里格公式是計算三維空間中,乙個向量繞旋轉軸旋轉給定角度以後得到的新向量的計算公式,具體的詳細推導可以看維基,我覺得只要能知道如何使用就可以了,注意旋轉軸為單位向量,來計算旋轉矩陣。...