天天看點

三維重建中旋轉矩陣與平移矩陣思想誤區

三維重建中通常要解決這樣一個問題,通過裝置采集系統得到一個物體不同角度下的深度資料,假設深度資料已經轉換為X,Y,Z坐标,那麼需要通過兩幀之間的坐标計算這兩幀對應的裝置旋轉的角度與平移量。但計算得到的旋轉矩陣與平移矩陣與計算機圖形學上所說的旋轉與平移矩陣有一點差別。

假設第一幀中點坐标為(x1,y1,z1),第二幀中對應點坐标為(x2,y2,z2),那麼他們的坐标變換公式為:

(x2,y2,z2)=(x1,y1,z1)* R + T 
           

這裡的R和T并不是從第一個坐标系C1到第二個坐标系C2的過渡矩陣C(通常是一個旋轉矩陣),而是C的逆,T也不是從C1的原點到C2的原點對應的平移向量。為了更好的說清楚這件事,以二維的情況為例:

三維重建中旋轉矩陣與平移矩陣思想誤區

如圖所示,點A是要采集的點,它在XOY坐标系下采集到的坐标為(x0,y0),當采集裝置換一個角度進行采集時,在X1O1Y1下的坐标為(x1,y1),那麼最後通過重建之後算出來的從(x0,y0)到(x1,y1)的轉換為:

(x1,y1)=(x0,y0)* R + T 
           

這裡我想說明的一點就是,計算結果裡的R是從坐标系XOY到坐标系X1O1Y1的對應的旋轉矩陣P的逆的轉置(記為C),而T并不是直接的從O平移到O1的向量(u,v),而是 -(u,v)* C 。

事實上這件事的原理很簡單,從線性代數的角度來看,O1A向量在X1O1Y1下的坐标為(x1,y1),在XOY下的坐标是OB向量對應的坐标,即(x0-u,y0-v),那麼就是找同一個向量在不同基下的坐标變換,翻下書就知道:

(x1,y1)=(x0-u,y0-v)* C = (x0,y0)* C - (u,v)* C
           

其中的C是從XOY到X1O1Y1對應的基變換的逆的轉置,對應的就是上面的R,而T對應的其實是上面的式子的後面的一部分,而不是我們傳統的了解上的平移向量(u,v)。

思想誤區:為什麼很多人會了解錯誤T的含義,是因為計算機圖形學上提到的平移與旋轉都是在同一個坐标系下進行的,也就是點A經過旋轉和平移之後得到的對應點還應該在該坐标系下(也就是它的坐标值是在原坐标系下的值),而三維重建中得到兩幀資料并不是在同一個坐标系下的表示,它其實是矩陣論中的線性變換,是同一個點在不同基下的表示。

繼續閱讀