常德網(wǎng)站設計公司寧波百度關鍵詞推廣
之前研究了二維點的仿射變換,用解矩陣的方式求解了兩組二維點之間的變換矩陣。
學習了下SVD,看到可以用SVD求解兩組多維點之間的歐式變換矩陣,當然也是個最優(yōu)化問題。
這里的變換只有平移和旋轉,沒有縮放。
一、先說結論:
現(xiàn)在有兩組點(2d,3d,或者多維都可以),
?需要找到R和t,使得
一般沒有完美解,需要找到最優(yōu)解R和t,使得P'變換后的點和P誤差最小。
操作步驟:
1,,求兩組點質心位置,得到兩組點去質心坐標
2,得到矩陣W
3,對W進行奇異值分解
4.得到最優(yōu)R和T
二、用halcon代碼來實現(xiàn)下
舉例測試兩組點P和Q
PX := [0.2,0.4,0.2,0.3]
PY := [0.4,0.6,0.8,0.6]
PZ := [0.6,0.8,0.6,0.5]
QX := [0.25,0.44,0.61,0.3]
QY := [0.32,0.56,0.82,0.4]
QZ := [0.4,0.18,0.6,0.51]
halcon代碼實現(xiàn)如下
*兩組3d點P和Q,每組4個點PX := [0.2,0.4,0.2,0.3]
PY := [0.4,0.6,0.8,0.6]
PZ := [0.6,0.8,0.6,0.5]
QX := [0.25,0.44,0.61,0.3]
QY := [0.32,0.56,0.82,0.4]
QZ := [0.4,0.18,0.6,0.51]*對P和Q去質心化處理
create_matrix (3, |PX|, [PX,PY,PZ], P)
mean_matrix (P, 'rows', PMean)
create_matrix(1,|PX|,1,Ones)
mult_matrix (PMean, Ones, 'AB', PSub)
sub_matrix(P,PSub,PShift)create_matrix(3,|QX|,[QX,QY,QZ],Q)
mean_matrix(Q,'rows', QMean)
create_matrix (1, |QX|, 0, Ones)
mult_matrix (QMean, Ones, 'AB', QSub)
sub_matrix (Q, QSub, QShift)*得到步驟2里的W矩陣,這里是3維點,左右W是個3*3矩陣
create_matrix (3, 3, 0, W)
for Index := 0 to |PX|-1 by 1get_sub_matrix (PShift, 0, Index, 3, 1, PVec)get_sub_matrix (QShift, 0, Index, 3, 1, QVec)transpose_matrix_mod (QVec)mult_matrix (PVec, QVec, 'AB', PQ)add_matrix_mod (W, PQ)
endfor*對W進行svd分解
svd_matrix (W, 'full', 'both', U, S, V)*計算R
transpose_matrix_mod(U)
mult_matrix (V, U, 'AB', R)*計算R的行列式是否為1
determinant_matrix (R, 'general', Value)
if (Value < 0)get_value_matrix (V, [0,1,2], [2,2,2], Value1)set_value_matrix (V, [0,1,2], [2,2,2], [-Value1[0],-Value1[1],-Value1[2]])mult_matrix (V, U, 'AB', R)
endif*計算t
mult_matrix (R, PMean, 'AB', RPMean)
sub_matrix(QMean,RPMean,t)*得到最后的變換矩陣3*4
create_matrix(3,4,0,HomMat3DID)
set_sub_matrix (HomMat3DID, R, 0, 0)
set_sub_matrix(HomMat3DID, t, 0, 3)
get_full_matrix (HomMat3DID, HomMat3D)
得到的變換矩陣為
[-0.65053, 0.436583, 0.621455, -0.0714635, 0.519911, 0.852471, -0.0546402, -0.095308, -0.553627, 0.287556, -0.781542, 0.890677]
三、證明過程
? ??證明過程內容有點多,晚點整理整理再寫
參考文章
三維重建(4)之SVD求解三維變換矩陣Rt(旋轉+平移)_svd分解求旋轉平移矩陣_明月醉窗臺的博客-CSDN博客
使用SVD來求解優(yōu)化問題最優(yōu)值 - 知乎